📄 get_mac.c
字号:
/* * get_mac.c * * Return the MAC (ie, ethernet hardware) address by using system specific calls. */#include <stdio.h>#include <fcntl.h>#include <stdlib.h>#include <string.h>#include <unistd.h>#include <sys/ioctl.h>#include <sys/types.h>#include <sys/socket.h>#include <netinet/in.h>#include <linux/if.h>#include "getmac_struct.h"#define e0 "eth0"#define e1 "eth1"#define e2 "eth2"#define e3 "eth3"#define P printflong get_mac( u_char *addr, int e){ struct ifreq ifr; struct ifreq *IFR; struct ifconf ifc; char buf[1024]; int s, i; int ok = 0; int eth; s = socket(AF_INET, SOCK_DGRAM, 0); if (s==-1) { return -1; } ifc.ifc_len = sizeof(buf); ifc.ifc_buf = buf; ioctl(s, SIOCGIFCONF, &ifc); IFR = ifc.ifc_req; for (i = ifc.ifc_len / sizeof(struct ifreq); --i >= 0; IFR++) { strcpy(ifr.ifr_name, IFR->ifr_name); switch (e) { case 0 : if(strcmp(ifr.ifr_name,e0)==0) { if (ioctl(s, SIOCGIFFLAGS, &ifr) == 0) { if (! (ifr.ifr_flags & IFF_LOOPBACK)) { if (ioctl(s, SIOCGIFHWADDR, &ifr) == 0) { ok = 1; break; } } } } break; case 1 : if(strcmp(ifr.ifr_name,e1)==0) { if (ioctl(s, SIOCGIFFLAGS, &ifr) == 0) { if (! (ifr.ifr_flags & IFF_LOOPBACK)) { if (ioctl(s, SIOCGIFHWADDR, &ifr) == 0) { ok = 1; break; } } } } break; case 2 : if(strcmp(ifr.ifr_name,e2)==0) { if (ioctl(s, SIOCGIFFLAGS, &ifr) == 0) { if (! (ifr.ifr_flags & IFF_LOOPBACK)) { if (ioctl(s, SIOCGIFHWADDR, &ifr) == 0) { ok = 1; break; } } } } break; case 3 : if(strcmp(ifr.ifr_name,e3)==0) { if (ioctl(s, SIOCGIFFLAGS, &ifr) == 0) { if (! (ifr.ifr_flags & IFF_LOOPBACK)) { if (ioctl(s, SIOCGIFHWADDR, &ifr) == 0) { ok = 1; break; } } } } break; }//end of switch }//end of for close(s); if (ok) { bcopy( ifr.ifr_hwaddr.sa_data, addr, 12); } else { return -1; } return 0;}//-----------------------------------------------------------int print_mac(u_char *addr, int e){ int i; printf( "MAC address of eth%d: = ",e); for (i=0; i<6; ++i) { printf("%2.2x", addr[i]); } printf( "\n"); return 0;}//----------------------------------------------------------//Xay dung module luu lai cac dia chi MAC vua lay duocvoid saveMac(u_char *addr,struct SwitchMac *a, int i){bcopy(addr,a->s_mac[i].mac,6);a->num_mac++;}//---------------------------------------------------------print_saveMac(struct SwitchMac *a){ int i,j,n;n=a->num_mac;printf("Save Mac:\n");for(i=0;i<n;i++){ for (j=0; j<6; ++j) { printf("%2.2x", a->s_mac[i].mac[j]); } printf( "\n");}}//=========================================================
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -