#include <stdio.h>
#include <unistd.h>#include <netdb.h>#include <arpa/inet.h>#include <stdlib.h>#include <sys/ioctl.h>#include <sys/types.h>#include <sys/socket.h>#include <net/if.h>#define MAXINTERFACES 16void get_ip(){ int sock_fd; struct ifreq buf[MAXINTERFACES]; struct ifconf ifc; int interface_num; char *addr;//[ADDR_LEN]; if((sock_fd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) { printf("Create socket failed"); return; } ifc.ifc_len = sizeof(buf); ifc.ifc_req = buf; if(ioctl(sock_fd, SIOCGIFCONF, (char *)&ifc) < 0) { printf("Get a list of interface addresses failed"); return; } interface_num = ifc.ifc_len / sizeof(struct ifreq); printf("The number of interfaces is %d\n", interface_num); while(interface_num--) { printf("Net device: %s\n", buf[interface_num].ifr_name); if(ioctl(sock_fd, SIOCGIFFLAGS, (char *)&buf[interface_num]) < 0) { printf("Get the active flag word of the device"); continue; } if(buf[interface_num].ifr_flags & IFF_PROMISC) printf("Interface is in promiscuous mode\n"); if(buf[interface_num].ifr_flags & IFF_UP) printf("Interface is running\n"); else printf("Interface is not running\n"); if(ioctl(sock_fd, SIOCGIFADDR, (char *)&buf[interface_num]) < 0) { printf("Get interface address failed"); continue; } addr = inet_ntoa(((struct sockaddr_in*)(&buf[interface_num].ifr_addr))->sin_addr); printf("IP address is %s\n", addr); }close(sock_fd);
return;}void get_mac(){ int sock_fd; struct ifreq buf[MAXINTERFACES]; struct ifconf ifc; int interface_num; if((sock_fd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) { printf("Create socket failed"); return; } ifc.ifc_len = sizeof(buf); ifc.ifc_req = buf; if(ioctl(sock_fd, SIOCGIFCONF, (char *)&ifc) < 0) { printf("Get a list of interface addresses failed"); return; } interface_num = ifc.ifc_len / sizeof(struct ifreq); printf("The number of interfaces is %d\n", interface_num); while(interface_num--) { printf("Net device: %s\n", buf[interface_num].ifr_name); if(ioctl(sock_fd, SIOCGIFFLAGS, (char *)&buf[interface_num]) < 0) { printf("Get the active flag word of the device"); continue; } if(buf[interface_num].ifr_flags & IFF_PROMISC) printf("Interface is in promiscuous mode\n"); if(buf[interface_num].ifr_flags & IFF_UP) printf("Interface is running\n"); else printf("Interface is not running\n"); if(ioctl(sock_fd, SIOCGIFHWADDR, (char *)&buf[interface_num]) < 0) { printf("Get the hardware address of a device failed"); continue; } printf("Mac address is: %02X:%02X:%02X:%02X:%02X:%02X\n", (unsigned char)buf[interface_num].ifr_hwaddr.sa_data[0], (unsigned char)buf[interface_num].ifr_hwaddr.sa_data[1], (unsigned char)buf[interface_num].ifr_hwaddr.sa_data[2], (unsigned char)buf[interface_num].ifr_hwaddr.sa_data[3], (unsigned char)buf[interface_num].ifr_hwaddr.sa_data[4], (unsigned char)buf[interface_num].ifr_hwaddr.sa_data[5]); }close(sock_fd);
} posted on 2015-01-15 08:46 阅读( ...) 评论( ...)