linux 指定網絡卡獲取對方 對端 mac位址

2021-08-25 11:16:30 字數 1703 閱讀 3043

注意: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...