|
#include <stdio.h>
#include <sys/types.h> #include <sys/socket.h> #include <sys/ioctl.h> #include <netinet/in.h> #include <net/if.h> #include <net/if_arp.h> #include <arpa/inet.h> #include <errno.h> #define ETH_NAME "eth0" //你的可以上internet的网卡设备名 int main() { int sock; struct sockaddr_in sin; struct sockaddr sa; struct ifreq ifr; unsigned char mac[6]; sock = socket(AF_INET, SOCK_DGRAM, 0); if (sock == -1) { perror("socket"); return -1; } strncpy(ifr.ifr_name, ETH_NAME, IFNAMSIZ); ifr.ifr_name[IFNAMSIZ - 1] = 0; if (ioctl(sock, SIOCGIFADDR, &ifr) < 0) { perror("ioctl"); return -1; } memcpy(&sin, &ifr.ifr_addr, sizeof(sin)); fprintf(stdout, "%s ip: %s\n", ETH_NAME, inet_ntoa(sin.sin_addr)); memset(mac, 0, sizeof(mac)); if (ioctl(sock, SIOCGIFHWADDR, &ifr) < 0) { perror("ioctl"); return -1; } memcpy(&sa, &ifr.ifr_addr, sizeof(sin)); memcpy(mac, sa.sa_data, sizeof(mac)); fprintf(stdout, "%s mac: %.2X:%.2X:%.2X:%.2X:%.2X:%.2X\n", ETH_NAME, mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]); return 0; } |
linux 多网卡编程
最新推荐文章于 2021-05-07 07:36:48 发布