본것중에 가장 간단하게 /proc/net/route를 파싱하는 소스인 듯하다.
아무튼 route로 출력하는 default가 UG 플래그로 default gateway이며,
파일에서는 Destination과 Mask가 0x00000000 인 녀석이 default gateway이다.
[링크 : http://elenoa.tistory.com/72]
# cat /proc/net/route Iface Destination Gateway Flags RefCnt Use Metric Mask MTU Window IRTT eth0 000AA8C0 00000000 0001 0 0 0 00FFFFFF 0 0 0 eth0 00000000 010AA8C0 0003 0 0 0 00000000 0 0 0 # route Kernel IP routing table Destination Gateway Genmask Flags Metric Ref Use Iface 192.168.10.0 * 255.255.255.0 U 0 0 0 eth0 default 192.168.10.1 0.0.0.0 UG 0 0 0 eth0 |
아무튼 route로 출력하는 default가 UG 플래그로 default gateway이며,
파일에서는 Destination과 Mask가 0x00000000 인 녀석이 default gateway이다.
#include "stdio.h" #include "stdlib.h" #include "unistd.h" #define IP_PRINT(a) \ *((unsigned char *)(&a)), \ *(((unsigned char *)(&a)) + 1), \ *(((unsigned char *)(&a)) + 2), \ *(((unsigned char *)(&a)) + 3) int main() { FILE* fp = fopen("/proc/net/route", "r"); char buf[256]; static char iface[256]; unsigned int destination, gateway, flags, refcnt, use, metric, mask; int ret; if (fp == NULL) exit(-1); while (fgets(buf, 255, fp)) { if (!strncmp(buf, "Iface", 5)) continue; ret = sscanf(buf, "%s\t%x\t%x\t%d\t%d\t%d\t%d\t%x", iface, &destination, &gateway, &flags, &refcnt, &use, &metric, &mask); if (ret < 8) { fprintf(stderr, "ERROR: line read error\n"); continue; } if (destination != 0) { fprintf(stderr, "%s: gateway %u.%u.%u.%u, " "destination %u.%u.%u.%u netmask %u.%u.%u.%u\n", iface, IP_PRINT(gateway), IP_PRINT(destination), IP_PRINT(mask)); continue; } if (mask != 0) { fprintf(stderr, "%s: gateway %u.%u.%u.%u, default, " "but have netmask %u.%u.%u.%u???\n", iface, IP_PRINT(gateway), IP_PRINT(mask)); continue; } fprintf(stderr, "%s: gateway %u.%u.%u.%u, default\n", iface, IP_PRINT(gateway)); } fclose(fp); }
[링크 : http://elenoa.tistory.com/72]
'Linux' 카테고리의 다른 글
lsof - list Open File (0) | 2009.12.07 |
---|---|
filesystem - msdos, vfat, umsdos (0) | 2009.12.06 |
좀비 프로세스 생성하기(!) (0) | 2009.11.20 |
ps에서 [프로세스] 의 의미 - bracket process name in ps (0) | 2009.11.20 |
ps - Process Status (2) | 2009.11.20 |