linux에서 대역폭 가져오는 방법
글쓴이: mini7510 / 작성시간: 월, 2004/08/16 - 7:32오후
linux에서 네트웍 정보 가지고 오는 코드입니다.
제가 가져오고 싶은 정보는 대역폭 입니다.
이 예제되로 하면 대역폭 정보가 이상하게 나오는데
어떻게 해야 대역폭 정보를 가져올수 있는지 알고 싶습니다.
아시고 계신분은 좋은 답변부탁드립니다.
#include <sys/ioctl.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <sys/socket.h>
#include <unistd.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <net/if.h>
#include <arpa/inet.h>
int main()
{
struct ifreq *ifr;
struct sockaddr_in *sin;
struct ifconf ifcfg;
int fd;
int n;
int numreqs = 30;
fd = socket(AF_INET, SOCK_DGRAM, 0);
memset(&ifcfg, 0, sizeof(ifcfg));
ifcfg.ifc_buf = NULL;
ifcfg.ifc_len = sizeof(struct ifreq) * numreqs;
ifcfg.ifc_buf = (char *)malloc(ifcfg.ifc_len);
for(;;)
{
ifcfg.ifc_len = sizeof(struct ifreq) * numreqs;
ifcfg.ifc_buf = (char *)realloc(ifcfg.ifc_buf, ifcfg.ifc_len);
if (ioctl(fd, SIOCGIFCONF, (char *)&ifcfg) < 0)
{
perror("SIOCGIFCONF ");
return 0;
}
printf("%d : %d \n", ifcfg.ifc_len, sizeof(struct ifreq));
break;
}
ifr = ifcfg.ifc_req;
for (n = 0; n < ifcfg.ifc_len; n+= sizeof(struct ifreq))
{
printf("%s\n", ifr->ifr_name);
sin = (struct sockaddr_in *)&ifr->ifr_addr;
printf("IP %s\n", inet_ntoa(sin->sin_addr) );
if ( (sin->sin_addr.s_addr) == INADDR_LOOPBACK)
{
printf("Loop Back\n");
}
ioctl(fd, SIOCGIFBRDADDR, (char *)ifr);
sin = (struct sockaddr_in *)&ifr->ifr_broadaddr;
printf("BROD %s\n", inet_ntoa(sin->sin_addr));
ioctl(fd, SIOCGIFNETMASK, (char *)ifr);
sin = (struct sockaddr_in *)&ifr->ifr_addr;
printf("MASK %s\n", inet_ntoa(sin->sin_addr));
ioctl(fd, SIOCGIFMTU, (char *)ifr);
printf("MTU %d\n", ifr->ifr_mtu);
ioctl(fd, SIOCGIFINDEX, (char *)ifr);
printf("BAND %d %d\n", ifr->ifr_ifindex, ifr->ifr_bandwidth);
printf("\n");
ifr++;
}
}
[/b]
Forums:


댓글 달기