注意:net_card_name為網絡卡的名稱,如圖一中 device下的即為各網絡卡暱稱。mac為十六進製制總共6個位元組,需要轉換成字串的可以用sprintf轉換一下就可以。
int from_socket_get_mac( int sock_fd, char *mac, const char* net_card_name )
else
else
} return 0;
}
注意:net_card_name為網絡卡的名稱,如圖一中 device下的即為各網絡卡暱稱。mac為十六進製制總共6個位元組,需要轉換成字串的可以用sprintf轉換一下就可以。
static int32_t from_ip_addr_get_mac(int8_t *ip_addr, int8_t* mac,const int8_t* net_card_name )
sin = (struct sockaddr_in *) &ss;
sin->sin_family = af_inet;
if (inet_pton(af_inet, (char *)ip_addr, &(sin->sin_addr)) <= 0)
sin = (struct sockaddr_in *) &arpreq.arp_pa;
memcpy(sin, &ss, sizeof(struct sockaddr_in));
strcpy((char *)arpreq.arp_dev, (char *)net_card_name );
arpreq.arp_ha.sa_family = af_unspec;
if (ioctl(sockfd, siocgarp, &arpreq) < 0)
ptr = (uint8_t *)arpreq.arp_ha.sa_data;
memcpy(mac,ptr,6);
close(sockfd);
return 0;
}
注意:net_card_name為網絡卡的名稱,如圖一中 device下的即為各網絡卡暱稱。mac為字串型別。如果沒找到對應mac則將返回null;
char * from_arp_file_get_mac(const char *req_ip,uint8_t *get_mac,const char *net_card_name )
; char * reply = null;
if (!(proc = fopen("/proc/net/arp", "r")))
/* skip first line */
while (!feof(proc) && fgetc(proc) != '\n');
/* find ip, copy mac in reply */
reply = null;
while (!feof(proc) && (fscanf(proc, " %15[0-9.] %*s %*s %17[a-fa-f0-9:] %*s %s", ip, mac,name) == 3))
}fclose(proc);
return reply;
}
linux 獲取本地mac位址 指定網絡卡
獲取本地mac std string getlocalmac memset ifr mac,0,sizeof ifr mac strncpy ifr mac.ifr name,eth0 sizeof ifr mac.ifr name 1 if ioctl sock mac,siocgifhwaddr...
獲取指定網絡卡的MAC位址
由於終端裝置多網絡卡使用的問題,以前使用netbios 獲取網絡卡mac位址的方法可能導致不可靠的問題。現推薦大家使用如下方法實現 cstring getlicense cstring strmac cstring getmacbyname cstring strname strcat szfile...
linux 獲取網絡卡資訊
sar n dev 2 10 41 37 am iface rxpck s txpck s rxkb s txkb s rxcmp s txcmp s rxmcst s 10 41 39 am eth0 1.50 1648.00 0.15 117.54 0.00 0.00 1.00 10 41 39...