ÃÑ ÆäÀÌÁö ¼ö : 3224
![]()
|
Facebook Joinc ±×·ì
Joinc QA »çÀÌÆ®
ÇöÀçÀ§Ä¡ : article>network_information
![]()
Tweet
joinc´Â Firefox¿Í chrome¿¡¼ Å×½ºÆ® Çß½À´Ï´Ù. IE¿¡¼´Â Å×À̺íÀÌ ±úÁö°Å³ª À̹ÌÁö°¡ º¸ÀÌÁö ¾ÊÀ» ¼ö ÀÖ½À´Ï´Ù. ƯÈ÷ ±¸±Û DocsÀ̹ÌÁöÀÇ °æ¿ì ¿¢¹Úó¸®µÉ ¼ö ÀÖ½À´Ï´Ù. 1 ¼Ò°³
Unix ¿î¿µÃ¼Á¦¿¡¼ÀÇ ³×Æ®¿öÅ© Á¤º¸¼öÁý¿¡ ´ëÇÑ ³»¿ëÀ» ´Ù·é´Ù. Unix ¿î¿µÃ¼Á¦ ¸¶´Ù ¼öÁýÇØ¾ßÇÏ´Â ¹æ¹ýÀÌ Â÷À̰¡ ÀÖÀ½À¸·Î ¿î¿µÃ¼Á¦º°·Î ¼³¸íÀ» Çϵµ·Ï ÇϰڴÙ.
¿©±â¿¡¼ ¼öÁýÇÒ ³×Æ®¿öÅ© Á¤º¸´Â ¾Æ·¡ÀÇ ¸ñ·Ïµé¿¡ Æ÷ÇÔµÈ ³»¿ëµéÀÌ´Ù.
2 Linux
¸®´ª½º ¿î¿µÃ¼Á¦ÀÇ °æ¿ì ´ëºÎºÐÀÇ Áß¿ä Á¤º¸µéÀ» /proc ÆÄÀÏ ½Ã½ºÅÛÀ» ÅëÇØ¼ ¾ò¾î¿Ã ¼ö ÀÖ´Ù.
2.1 Snmp Ç׸ñ
MIBII¸¦ ±âÁØÀ¸·Î ÇÑ´Ù. 2.1.1 Interface º° I/O Á¤º¸
2.1.2 Àü¿ª ÆÐŶÁ¤º¸(IP/ICMP/TCP/UDP)2.2 ÀÎÅÍÆäÀ̽º ÀϹÝÁ¤º¸ ¾ò±â
ioctl(2)ÇÔ¼ö´Â ÀÔÃâ·Â ÀåÄ¡¸¦ Á¦¾îÇϰí, Àåºñ¸¦ ¾ò±â À§ÇÑ ¸ñÀûÀ¸·Î »ç¿ëÇÏ´Â ÇÔ¼ö´Ù. ioctlÀ» ÅëÇØ¼ ÇØ´ç ÀåÄ¡¿¡ ´ëÇÑ Á¦¾î¿Í Á¤º¸¸¦ ¾ò±â À§Çؼ´Â ÇØ´ç »çÇ׿¡ ´ëÇØ¼ ¾î¶°ÇÑ flags¸¦ »ç¿ëÇÏ´ÂÁö¸¦ ¾Ë°í ÀÖ¾î¾ß ÇÑ´Ù.
À̵é flags´Â /usr/include/bits/ioctls.h¿¡ Á¤ÀǵǾî ÀÖ´Ù. ÀÌÁß ³×Æ®¿öÅ© ÀåÄ¡µéÀº SIOCGIFÀÇ Á¢µÎ»ç¸¦ °¡Áö°í Á¤ÀǵǾî ÀÖ´Ù. ´ÙÀ½Àº ±×Áß ÀϺκÐÀÌ´Ù. #define SIOCGIFNAME 0x8910 /* get iface name */ #define SIOCSIFLINK 0x8911 /* set iface channel */ #define SIOCGIFCONF 0x8912 /* get iface list */ #define SIOCGIFFLAGS 0x8913 /* get flags */ #define SIOCSIFFLAGS 0x8914 /* set flags */ #define SIOCGIFADDR 0x8915 /* get PA address */ #define SIOCSIFADDR 0x8916 /* set PA address */ #define SIOCGIFDSTADDR 0x8917 /* get remote PA address */ #define SIOCSIFDSTADDR 0x8918 /* set remote PA address */ #define SIOCGIFBRDADDR 0x8919 /* get broadcast PA address */ #define SIOCSIFBRDADDR 0x891a /* set broadcast PA address */ #define SIOCGIFNETMASK 0x891b /* get network PA mask */ #define SIOCSIFNETMASK 0x891c /* set network PA mask */ #define SIOCGIFMETRIC 0x891d /* get metric */ #define SIOCSIFMETRIC 0x891e /* set metric */ #define SIOCGIFMEM 0x891f /* get memory address (BSD) */ #define SIOCSIFMEM 0x8920 /* set memory address (BSD) */ #define SIOCGIFMTU 0x8921 /* get MTU size */ #define SIOCSIFMTU 0x8922 /* set MTU size */ #define SIOCSIFNAME 0x8923 /* set interface name */ #define SIOCSIFHWADDR 0x8924 /* set hardware address */À̸§À¸·Î ¾îµð¿¡ »ç¿ëµÇ´Â Ç÷¹±×µéÀÎÁö ÃæºÐÈ÷ ¾Ë¾Æº¼ ¼ö ÀÖÀ¸¸®¶ó »ý°¢µÈ´Ù. 2.2.1 ioctl(2)¸¦ ÀÌ¿ëÇÑ ÀÎÅÍÆäÀ̽º Á¤º¸ ¼öÁý
´ÙÀ½Àº ioctlÇÔ¼ö¸¦ ÀÌ¿ëÇØ¼ eth0ÀÇ ÀÎÅÍÆäÀ̽º Á¤º¸¸¦ ¼öÁýÇÏ´Â ¹æ¹ýÀÌ´Ù. int fd; struct ifreq ifrq; struct sockaddr_in *sin; fd = socket(AF_INET, SOCK_DGRAM, 0); // eth0¿¡ ´ëÇÑ MAC ÁÖ¼Ò¸¦ ¾ò´Â´Ù. strcpy(ifrq.ifr_name, "eth0"); if (ioctl(fd,SIOCGIFHWADDR, &ifrq) < 0) { // ¿¡·¯Ã³¸® } printf("Mac Address : %s", ifrq.ifr_hwaddr.sa_data); // MACÁÖ¼Ò¸¦ ":"·Î ±¸ºÐµÇ´Â Ç¥ÁØÆ÷¸äÀ¸·Î ¸¸µé±â À§Çؼ´Â // º°µµÀÇ Äڵ尡 ÇÊ¿äÇÏ´Ù. // eth0¿¡ ´ëÇÑ IP address ¸¦ ¾ò´Â´Ù. if (ioctl(fd, SIOCGIFADDR, &ifrq) < 0) { // ¿¡·¯Ã³¸® } sin = (sockaddr_in *)&ifrq.ifr_addr; printf("%s\n", inet_ntoa(sin->sin_addr));
Äڵ带 ¸íÈ®È÷ ÀÌÇØÇÏ°í »ç¿ëÇϱâ À§Çؼ´Â ifreq ±¸Á¶Ã¼¿¡ ´ëÇØ¼ Á¤È®ÇÑ Á¤º¸¸¦ °¡Áö°í ÀÖÀ» Çʿ䰡 ÀÖ´Ù. ifreq ±¸Á¶Ã¼´Â /usr/include/net/if.h¿¡ Á¤ÀǵǾî ÀÖÀ¸´Ï Âü°íÇϱ⠹ٶõ´Ù. 2.2.1.1 ÀÎÅÍÆäÀ̽º »óÅÂ
ÀÎÅÍÆäÀ̽º´Â ¿©·¯°¡Áö »óŰ¡ ÀÖÀ» ¼ö ÀÖ´Ù. ÇöÀç up»óŰ¡ ¾Æ´Ò ¼öµµ ÀÖ°í, loopback »óÅÂÀÇ ÀåÄ¡ÀÏ ¼öµµ ÀÖ´Ù. ÀÌ·¯ÇÑ Á¤º¸´Â SIOCGIFFLAGS¸¦ ÀÌ¿ëÇØ¼ flag°ªÀ» ºÐ¼®ÇÔÀ¸·Î½á ¾ò¾î¿Ã ¼ö ÀÖ´Ù. flags¿¡ °üÇÑ Á¤º¸´Â /usr/include/net/if.h¿¡ Á¤ÀǵǾî ÀÖÀ¸´Ï Âü°íÇϱ⠹ٶõ´Ù. #ifdef __USE_MISC
/* Standard interface flags. */
enum
{
IFF_UP = 0x1, /* Interface is up. */
# define IFF_UP IFF_UP
IFF_BROADCAST = 0x2, /* Broadcast address valid. */
# define IFF_BROADCAST IFF_BROADCAST
IFF_DEBUG = 0x4, /* Turn on debugging. */
# define IFF_DEBUG IFF_DEBUG
IFF_LOOPBACK = 0x8, /* Is a loopback net. */
# define IFF_LOOPBACK IFF_LOOPBACK
IFF_POINTOPOINT = 0x10, /* Interface is point-to-point link. */
# define IFF_POINTOPOINT IFF_POINTOPOINT
IFF_NOTRAILERS = 0x20, /* Avoid use of trailers. */
......
´ÙÀ½Àº ioctl(2)¸¦ ÀÌ¿ëÇØ¼ ÀÎÅÍÆäÀ̽º Á¤º¸¸¦ ¾ò¾î¿À´Â ¿¹Á¦´Ù. #include <sys/socket.h> #include <unistd.h> #include <netinet/in.h> #include <arpa/inet.h> #include <stdio.h> #include <net/if.h> #include <sys/ioctl.h> #include <sys/stat.h> #include <arpa/inet.h> int main(int argc, char **argv) { int fd; int i; struct ifreq ifrq; struct sockaddr_in *sin; if (argc != 2) { printf("usage : ./ifinfo [ifname]\n"); return 1; } fd = socket (AF_INET, SOCK_DGRAM, 0); if(fd < 0) { perror("Socket open error"); return 1; } strcpy(ifrq.ifr_name, argv[1]); if(ioctl(fd, SIOCGIFHWADDR, &ifrq) < 0) { perror("Mac Error"); } // MAC ÁÖ¼Ò´Â Àû´çÈ÷ º¯È¯½Ã۵µ·Ï ÇÏÀÚ. for (i = 0; i < 6; i++) { printf("%x\n",ifrq.ifr_addr.sa_data[i]); } if(ioctl(fd, SIOCGIFADDR, &ifrq) < 0) { perror("IPADDR Error"); } sin = (struct sockaddr_in *)&ifrq.ifr_addr; printf("IPADDR : %s\n", inet_ntoa(sin->sin_addr)); if(ioctl(fd, SIOCGIFMTU, &ifrq) < 0) { perror("IPADDR Error"); } printf("MTU : %d\n", ifrq.ifr_mtu); // GET NETMASK if(ioctl(fd, SIOCGIFNETMASK, &ifrq) < 0) { perror("NETMASK Error"); } sin = (struct sockaddr_in *)&ifrq.ifr_addr; printf("NETMASK : %s\n", inet_ntoa(sin->sin_addr)); if(ioctl(fd, SIOCGIFFLAGS, &ifrq) < 0) { perror("SIOCGIFFLAGS"); } if(!(ifrq.ifr_flags & IFF_UP)) { printf("IF STATUS UP\n"); } else { printf("IF STATUS DOWN\n"); } close(fd); }±×·±µ¥ À§ÀÇ ÄÚµå´Â ¾à°£ÀÇ ¹®Á¦°¡ ÀÖ´Ù. ±×°ÍÀº ÀÎÅÍÆäÀ̽º À̸§À» ¹Ýµå½Ã ¾Ë°í ÀÖ¾î¾ß¸¸ Á¤º¸¸¦ ¾ò¾î¿Ã ¼ö ÀÖ´Ù´Â Á¡ÀÌ´Ù. Á»´õ ¹ü¿ë¼º ÀÖ´Â Äڵ带 À§Çؼ´Â ÇöÀç »ç¿ëÁßÀÎ ÀÎÅÍÆäÀ̽ºÀÇ À̸§À» ÀÚµ¿À¸·Î ¾ò¾î¿Í¼ °Å±â¿¡ ´ëÇÑ Á¤º¸¸¦ ±¸Á¶Ã¼ Çü½ÄÀ¸·Î ³Ñ°ÜÁÖµµ·Ï ÀÛ¼ºµÇ¾î¾ß ÇÒ°ÍÀÌ´Ù.
´ÙÇàÈ÷µµ ioctl(2)¿¡´Â ÀÛµ¿ÁßÀÎ ÀÎÅÍÆäÀ̽ºÀÇ ¸ñ·ÏÀ» À§ÇÑ SIOCGIFCONF¸¦ Á¦°øÇÑ´Ù. ÀÌ flag¸¦ ÀÌ¿ëÇØ¼ ÀÎÅÍÆäÀ̽ºÀÇ À̸§À» Æ÷ÇÔÇÑ ¸ñ·ÏÀ» ¾ò¾î¿Ã ¼ö ÀÖ´Ù. SIOCGIFCONFÀÇ ÀÀ¿ë¿¹´Â pcapÆäÀÌÁö¸¦ Âü°íÇϱ⠹ٶõ´Ù.
ÀÌ»ó SIOCGIFCONF¸¦ ÀÌ¿ëÇϸé ÀÎÅÍÆäÀ̽ºÀÇ ¸ñ·ÏÀ» ¾ò¾î¿Ã ¼ö Àִµ¥, ÀÛµ¿ÁßÀÎ ÀÎÅÍÆäÀ̽ºÀÇ ¸ñ·Ï¸¸À» ¾ò¾î¿Â´Ù´Â ¹®Á¦Á¡À» °¡Áø´Ù. ÇöÀç ½Ã½ºÅÛ¿¡ ¸î°³ÀÇ ÀÎÅÍÆäÀ̽º°¡ ÀÖ´ÂÁö, ¾î¶² Á¾·ùÀÎÁö(ÀÎÅÍÆäÀ̽º À̸§À» º¸¸é ±â°¡ºñÆ® ÀÌ´õ³ÝÀÎÁö ¾Æ´ÑÁöµî¿¡ ´ëÇÑ Á¤º¸¸¦ ¾òÀ» ¼ö ÀÖ´Ù), MAC µîÀÇ Á¤º¸¸¦ ¾ò±â À§Çؼ´Â ÀÛµ¿ÁßÀÌÁö ¾Ê´Â ÀÎÅÍÆäÀ̽º¶ó ÇÏ´õ¶óµµ Á¤º¸¸¦ ¾ò¾î¿Ã Çʿ䰡 ÀÖ´Ù.
ÀÌ ¹®Á¦´Â /proc/net/dev¸¦ ºÐ¼®ÇÔÀ¸·Î½á ÇØ°á°¡´ÉÇÏ´Ù. devÆÄÀÏ¿¡´Â ÀÎÅÍÆäÀ̽ºÀÇ À̸§»Ó¸¸ ¾Æ´Ï¶ó ÀÔÃâ·ÂµÇ´Â ÆÐŶ°ú µ¥ÀÌÅÍÀÇ countÁ¤º¸±îÁö Á¦°øÇØÁØ´Ù. devÆÄÀÏ¿¡ ´ëÇÑ ³»¿ëÀº µÚ¿¡¼ µû·Î ´Ù·çµµ·Ï ÇϰڴÙ.
MACÁÖ¼Ò º¯È¯Àº char2hex¸¦ Âü°íÇϱ⠹ٶõ´Ù. 2.2.2 º¸° ÄÚµå
Á»´õ º¸°ÇÑ Äڵ带 ¾Æ·¡¿¡ Àû¾îº¾´Ï´Ù. - minzkn /* Copyright (c) 2002 Information Equipment co.,LTD. All Right Reserved. Code by JaeHyuk Cho <minzkn@infoeq.co.kr> - Simple is best */ #if !defined(DEF_ifconfig_c) #define DEF_ifconfig_c "ifconfig.c" #include <stdio.h> #include <unistd.h> #include <stdlib.h> #include <string.h> #include <sys/types.h> #include <sys/socket.h> #include <sys/ioctl.h> #include <netinet/in.h> #include <net/if.h> #include <netinet/if_ether.h> #include <arpa/inet.h> #include <netdb.h> #include <netinet/ether.h> int main(int s_Argc, char **s_Argv); int main(int s_Argc, char **s_Argv) { int s_SocketHandle; int s_RequestCount = 10; struct ifconf s_ifconfig; struct ifreq *s_ifrequest; struct sockaddr_in *s_SockAddr_In; char s_StringBuffer[1 << 10]; char *s_MyTitle; char *s_MyDevice; char *s_MyIP, *s_MyBroadcastIP, *s_MyNetmaskIP; char *s_MyHWAddr; char *s_MyFlagString; int s_MyFlags, s_MyMTU, s_MyMetric; fprintf(stdout, "MZ_ifconfig v0.0.1b - Copyright(c)InfoEQ co.,LTD - %s %s\n", __DATE__, __TIME__); fprintf(stdout, "Code by JaeHyuk Cho - <minzkn@infoeq.co.kr>\n\n"); s_SocketHandle = socket(AF_INET, SOCK_DGRAM, 0); if(s_SocketHandle >= 0) { memset((void *)&s_ifconfig, 0, sizeof(struct ifconf)); do { if(s_ifconfig.ifc_buf)free(s_ifconfig.ifc_buf); s_ifconfig.ifc_len = sizeof(struct ifreq) * s_RequestCount; s_ifconfig.ifc_buf = malloc(s_ifconfig.ifc_len); if(s_ifconfig.ifc_buf) { if(ioctl(s_SocketHandle, SIOCGIFCONF, &s_ifconfig) == 0) { if(s_ifconfig.ifc_len < (sizeof(struct ifreq) * s_RequestCount)) { s_ifrequest = s_ifconfig.ifc_req; if(s_ifrequest) { for(s_RequestCount = 0;s_RequestCount < s_ifconfig.ifc_len;s_RequestCount += sizeof(struct ifreq), s_ifrequest++) { /* ------------------------------------------------------------------------ */ s_MyDevice = strdup(s_ifrequest->ifr_name); /* ioctl(s_SocketHandle, SIOCGIFADDR, s_ifrequest); */ s_SockAddr_In = (struct sockaddr_in *)(&s_ifrequest->ifr_addr); s_MyIP = strdup(inet_ntoa(s_SockAddr_In->sin_addr)); ioctl(s_SocketHandle, SIOCGIFBRDADDR, s_ifrequest); s_SockAddr_In = (struct sockaddr_in *)&s_ifrequest->ifr_broadaddr; s_MyBroadcastIP = strdup(inet_ntoa(s_SockAddr_In->sin_addr)); ioctl(s_SocketHandle, SIOCGIFNETMASK, s_ifrequest); s_SockAddr_In = (struct sockaddr_in *)&s_ifrequest->ifr_netmask; s_MyNetmaskIP = strdup(inet_ntoa(s_SockAddr_In->sin_addr)); #if 0 if(ioctl(s_SocketHandle, SIOCGIFHWADDR, s_ifrequest) == 0) { unsigned char s_NullHWAddr[] = {0, 0, 0, 0, 0, 0}; if(memcmp(&s_ifrequest->ifr_hwaddr.sa_data[0], &s_NullHWAddr[0], sizeof(s_NullHWAddr)) == 0)strcpy(s_StringBuffer, ""); else sprintf(s_StringBuffer, "HWAddr %s", ether_ntoa((struct ether_addr *)s_ifrequest->ifr_hwaddr.sa_data)); } else strcpy(s_StringBuffer, "HWAddr <ERROR>"); #else if(ioctl(s_SocketHandle, SIOCGIFHWADDR, s_ifrequest) == 0) { sprintf(s_StringBuffer, "HWAddr %s", ether_ntoa((struct ether_addr *)s_ifrequest->ifr_hwaddr.sa_data)); } else strcpy(s_StringBuffer, "HWAddr <ERROR>"); #endif s_MyHWAddr = strdup(s_StringBuffer); if(ioctl(s_SocketHandle, SIOCGIFFLAGS, s_ifrequest) == 0)s_MyFlags = s_ifrequest->ifr_flags; else s_MyFlags = 0; strcpy(s_StringBuffer, ""); if(s_MyFlags == 0)strcpy(s_StringBuffer, "[NO FLAGS]"); else { if(s_MyFlags & IFF_UP )strcat(s_StringBuffer, "UP "); if(s_MyFlags & IFF_BROADCAST )strcat(s_StringBuffer, "BROADCAST "); if(s_MyFlags & IFF_DEBUG )strcat(s_StringBuffer, "DEBUG "); if(s_MyFlags & IFF_LOOPBACK )strcat(s_StringBuffer, "LOOPBACK "); if(s_MyFlags & IFF_POINTOPOINT )strcat(s_StringBuffer, "POINTOPOINT "); if(s_MyFlags & IFF_NOTRAILERS )strcat(s_StringBuffer, "NOTRAILERS "); if(s_MyFlags & IFF_RUNNING )strcat(s_StringBuffer, "RUNNING "); if(s_MyFlags & IFF_NOARP )strcat(s_StringBuffer, "NOARP "); if(s_MyFlags & IFF_PROMISC )strcat(s_StringBuffer, "PROMISC "); if(s_MyFlags & IFF_ALLMULTI )strcat(s_StringBuffer, "ALLMULTI "); if(s_MyFlags & IFF_SLAVE )strcat(s_StringBuffer, "SLAVE "); if(s_MyFlags & IFF_MASTER )strcat(s_StringBuffer, "MASTER "); if(s_MyFlags & IFF_MULTICAST )strcat(s_StringBuffer, "MULTICAST "); } s_MyFlagString = strdup(s_StringBuffer); s_MyTitle = strdup("Unknown"); /* Not support */ if(ioctl(s_SocketHandle, SIOCGIFMTU, s_ifrequest) == 0)s_MyMTU = s_ifrequest->ifr_mtu; else s_MyMTU = 0; if(ioctl(s_SocketHandle, SIOCGIFMETRIC, s_ifrequest) == 0)s_MyMetric = s_ifrequest->ifr_metric; else s_MyMetric = 0; /* Print. */ fprintf(stdout, "%-8s Link encap:%s %s\n" "%-8s inet addr %-15s Broadcast %-15s Netmask %-15s\n" "%-8s %s MTU:%d Metric:%d\n" "\n", s_MyDevice, s_MyTitle, s_MyHWAddr, "", s_MyIP, s_MyBroadcastIP, s_MyNetmaskIP, "", s_MyFlagString, s_MyMTU, s_MyMetric ? s_MyMetric : 1 ); /* Free. */ if(s_MyTitle )free(s_MyTitle); if(s_MyDevice )free(s_MyDevice); if(s_MyIP )free(s_MyIP); if(s_MyBroadcastIP)free(s_MyBroadcastIP); if(s_MyNetmaskIP )free(s_MyNetmaskIP); if(s_MyHWAddr )free(s_MyHWAddr); if(s_MyFlagString )free(s_MyFlagString); /* ------------------------------------------------------------------------ */ } } break; } else s_RequestCount += 10; } else break; } else break; }while(1); if(s_ifconfig.ifc_buf)free(s_ifconfig.ifc_buf); close(s_SocketHandle); } else fprintf(stderr, "Can not open socket !!!\n"); return(0); } #endif /* End of source */ 2.3 Interfaceº° ÀÔÃâ·Â Á¤º¸
Linux ¿î¿µÃ¼Á¦ÀÇ °æ¿ì /proc/net/dev¿¡ °¢ ÀÎÅÍÆäÀ̽ºº° ÀÔÃâ·Â °á°ú¸¦ ±â·ÏÇϰí ÀÖ´Ù. Inter-| Receive | Transmit
face |bytes packets errs drop fifo frame compressed multicast|bytes packets errs drop fifo colls carrier compressed
lo:409140906 1037900 0 0 0 0 0 0 409140906 1037900 0 0 0 0 0 0
eth0:96555668 1756131 0 0 0 0 0 0 1919184 16396 0 0 0 0 0 0
eth1:264456417 12795632 0 0 130 0 0 0 795974945 13424861 0 0 0 632340 0 0
À§¿Í °°Àº Çü½ÄÀ¸·Î µÇ¾î ÀÖÀ¸´Ï ´Ü¼øÈ÷ ÆÄ½ÌÇØ¼ º¸¿©Áֱ⸸ ÇϸéµÈ´Ù.
´Ü À§ ÆÄÀÏ¿¡´Â ONµÇ¾î ÀÖÁö ¾ÊÀº ºñȰ¼ºÈ µÈ Interface±îÁö¸¦ ÀüºÎº¸¿©Áֱ⠶§¹®¿¡, Á¤º¸¸¦ °¡Á®¿À±â Àü¿¡ ÇØ´ç ÀÎÅÍÆäÀ̽º°¡ Ȱ¼ºÈ µÇ¾î ÀÖ´Â ÀÎÅÍÆäÀ̽ºÀÎÁö¸¦ È®ÀÎÇÒ Çʿ䰡 ÀÖ´Ù. ÀÌ È®ÀÎÀº ioctl(2)¿¡ SIOCGIFCONFÀ» ÀÌ¿ëÇÏ¸é µÈ´Ù.
´ÙÀ½Àº °£´ÜÇÑ ¿¹Á¦ ÇÁ·Î±×·¥ÀÌ´Ù. ÀϹÝÀûÀ¸·Î Interface ÀÔÃâ·Â Á¤º¸ÀÇ ´ÜÀ§´Â bpsȤÀº ppsÀÌ´Ù. ±×·¯¹Ç·Î bytesectionÀÇ °ªÀº *8 À» ÇØ¼ bit·Î º¯È¯½ÃÄÑÁÖ´Â ÀÛ¾÷ÀÌ ÇÊ¿äÇÒ °ÍÀÌ´Ù. ´õ¿í Á¦´ë·Î ÀÛµ¿ÇÏ°Ô ÇÏ·Á¸é ÀÌÀüÀÇ °ª°ú ÇöÀçÀÇ °ªÀ» ºñ±³Çؼ bps·Î ȯ»êµÈ °ªÀ» º¸¿©Áà¾ß °ÚÁö¸¸ ÀÌ ¿¹Á¦ Äڵ忡¼´Â »ý·«Çϵµ·Ï ÇϰڴÙ.
¾Æ·¡ÀÇ ÄÚµå´Â ÃÖ¼ÒÇÑÀÇ ÀÛµ¿¸¸À» º¸¿©ÁØ´Ù. ½Ã°£ÀÌ µÈ´Ù¸é ±×·²µíÇÑ ÄÚµå·Î º¯°æÇغ¸±â ¹Ù¶õ´Ù. #include <iostream> #include <map> #include <unistd.h> #include <stdio.h> #include <vector> #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> using namespace std; #define proc_net_dev_format "%s %s %s %s %s %s %s %s %s %s %s %s %s %s" vector<string> GetActiveInterface(); typedef struct _Inter_IO { char byte[16]; char packet[16]; char error[16]; char drop[16]; char fifo[16]; char frame[16]; char compressed[16]; char multicast[16]; } Inter_IO; typedef struct _interface_IO { char devname[16]; Inter_IO Rcv_IO; Inter_IO Snd_IO; } interface_IO; // ÀÎÅÍÆäÀ̽º ÀÔÃâ·Â Á¤º¸°¡ µé¾î°¥ ±¸Á¶Ã¼ typedef struct _devInfo { char devname[12]; int inbps; int outbps; int inpps; int outpps; int inucast; int outucast; int inerrs; int indrops; int outerrs; int outdrops; int status; } devInfo; vector<devInfo> getInterIO(); int main() { vector<devInfo> ldevInfo; cout << "=======================" << endl; ldevInfo = getInterIO(); for (int i = 0; i < ldevInfo.size(); i++) { cout << ldevInfo[i].devname << " : " << ldevInfo[i].inbps << " : " << ldevInfo[i].status << endl; } } // proc/net/dev ÆÄÀÏÀ» ºÐ¼®Çؼ ÀÎÅÍÆäÀ̽º ÀÔÃâ·Â Á¤º¸¸¦ ¾ò¾î¿Â´Ù. vector<devInfo> getInterIO() { FILE *fp; char line[1024]; unsigned int i; char name[20]; char devname[12]; char *lp; char *rp; devInfo ldevInfo; vector<devInfo> rtvInfo; vector<string> ActiveInf = GetActiveInterface(); interface_IO IfIO; if ((fp = fopen("/proc/net/dev", "r")) == NULL) { perror("fopen error"); } int linenum = -2; while(fgets(line, 1023, fp) != NULL) { if (linenum < 0) { linenum++; continue; } memset((void *)&IfIO, 0x00, sizeof(IfIO)); sscanf(line, proc_net_dev_format, name, IfIO.Rcv_IO.packet, IfIO.Rcv_IO.error, IfIO.Rcv_IO.drop, IfIO.Rcv_IO.fifo, IfIO.Rcv_IO.frame, IfIO.Rcv_IO.compressed, IfIO.Rcv_IO.multicast, // Snd IfIO.Snd_IO.byte, IfIO.Snd_IO.packet, IfIO.Snd_IO.error, IfIO.Snd_IO.drop, IfIO.Snd_IO.fifo, IfIO.Snd_IO.frame, IfIO.Snd_IO.compressed); lp = strstr(name, ":"); sprintf(IfIO.Rcv_IO.byte, "%s", lp+1); strncpy(IfIO.devname,name,lp-name); sprintf(ldevInfo.devname, "%s", IfIO.devname); ldevInfo.inbps = atoi(IfIO.Rcv_IO.byte); ldevInfo.outbps = atoi(IfIO.Snd_IO.byte); ldevInfo.inucast = atoi(IfIO.Rcv_IO.packet); ldevInfo.outucast = atoi(IfIO.Snd_IO.packet); ldevInfo.inerrs = atoi(IfIO.Rcv_IO.error); ldevInfo.outerrs = atoi(IfIO.Snd_IO.error); ldevInfo.indrops = atoi(IfIO.Rcv_IO.drop); ldevInfo.outdrops = atoi(IfIO.Snd_IO.drop); ldevInfo.status = 0; for (i = 0; i < ActiveInf.size(); i++) { if (ActiveInf[i] == IfIO.devname) { ldevInfo.status = 1; } } rtvInfo.push_back(ldevInfo); } fclose(fp); return rtvInfo; } // Ȱ¼ºÈµÈ ÀÎÅÍÆäÀ̽º ¸ñ·ÏÀ» ¾ò¾î¿Â´Ù. vector<string> GetActiveInterface() { struct ifreq *ifr; struct sockaddr_in *sin; struct ifconf ifcfg; int fd; int n; int numreqs = 36; vector<string> intername; fd = socket (AF_INET, SOCK_DGRAM, 0); memset(&ifcfg, 0x00, sizeof(ifcfg)); ifcfg.ifc_len = sizeof(struct ifreq) *numreqs; (void *)ifcfg.ifc_buf = malloc(ifcfg.ifc_len); ifcfg.ifc_len = sizeof(struct ifreq) * numreqs; (void *)ifcfg.ifc_buf = realloc(ifcfg.ifc_buf, ifcfg.ifc_len); if(ioctl(fd, SIOCGIFCONF, (char *)&ifcfg) < 0) { perror("ioctl error"); } ifr = ifcfg.ifc_req; for (n = 0; n < ifcfg.ifc_len; n+=sizeof(struct ifreq)) { intername.push_back(ifr->ifr_name); ifr++; } return intername; } |
|
||||||||||||||||||||||||||||
|
EmailÀ» ±âÀÔÇϸé, ´ñ±ÛÀÌ ¸ÞÀÏ·Î Àü´ÞµË´Ï´Ù. |
|