?? mac.c
字號:
#include <stdio.h>#include <sys/types.h>#include <sys/param.h>#include <sys/ioctl.h>#include <sys/socket.h>#include <net/if.h>#include <netinet/in.h>#include <net/if_arp.h>#define MAXINTERFACES 16int main(argc, argv)register int argc;register char *argv[];{ register int fd, intrface, retn = 0; struct ifreq buf[MAXINTERFACES]; struct arpreq arp; struct ifconf ifc; if ((fd = socket(AF_INET, SOCK_DGRAM, 0)) >= 0) { ifc.ifc_len = sizeof buf; ifc.ifc_buf = (caddr_t) buf; if (!ioctl(fd, SIOCGIFCONF, (char *) &ifc)) { intrface = ifc.ifc_len / sizeof(struct ifreq); printf("interface num is intrface=%d\n\n\n", intrface); while (intrface-- > 0) { printf("net device %s\n", buf[intrface].ifr_name);/*Jugde whether the net card status is promisc*/ if (!(ioctl(fd, SIOCGIFFLAGS, (char *) &buf[intrface]))) { if (buf[intrface].ifr_flags & IFF_PROMISC) { puts("the interface is PROMISC"); retn++; } } else { char str[256]; sprintf(str, "cpm: ioctl device %s", buf[intrface].ifr_name); perror(str); }/*Jugde whether the net card status is up*/ if (buf[intrface].ifr_flags & IFF_RUNNING) { puts("the interface status is UP"); } else { puts("the interface status is DOWN"); }/*Get IP of the net card */ if (!(ioctl(fd, SIOCGIFADDR, (char *) &buf[intrface]))) { puts("IP address is:"); puts(inet_ntoa (((struct sockaddr_in *) (&buf[intrface]. ifr_addr))->sin_addr)); puts("");//puts (buf[intrface].ifr_addr.sa_data); } else { char str[256]; sprintf(str, "cpm: ioctl device %s", buf[intrface].ifr_name); perror(str); }/*Get HW ADDRESS of the net card */ if (!(ioctl(fd, SIOCGIFHWADDR, (char *) &buf[intrface]))) { puts("HW address is:"); printf("%02x:%02x:%02x:%02x:%02x:%02x\n", (unsigned char) buf[intrface].ifr_hwaddr. sa_data[0], (unsigned char) buf[intrface].ifr_hwaddr. sa_data[1], (unsigned char) buf[intrface].ifr_hwaddr. sa_data[2], (unsigned char) buf[intrface].ifr_hwaddr. sa_data[3], (unsigned char) buf[intrface].ifr_hwaddr. sa_data[4], (unsigned char) buf[intrface].ifr_hwaddr. sa_data[5]); puts(""); puts(""); } else { char str[256]; sprintf(str, "cpm: ioctl device %s", buf[intrface].ifr_name); perror(str); } } } else perror("cpm: ioctl"); } else perror("cpm: socket"); close(fd); return retn;}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -