Здравствуйте!
Скажите пожалуйста, как можно узнать MAC-адрес устройства в локальной сети, зная его IP?
Есть вот такой код, но при использовании этой функции получаю "ioctl: No such device", хотя устройство с этим адресом точно подключено.void *GetMAC(char *IP) {
int s;
struct arpreq arpreq;
struct sockaddr_in *sin;
unsigned char *eap;memset(&arpreq, 0, sizeof(arpreq));
sin = (struct sockaddr_in *) &arpreq.arp_pa;
sin->sin_family = AF_INET;
sin->sin_addr.s_addr = inet_addr(IP);s = socket(AF_INET, SOCK_DGRAM, 0);
if (s < 0) {
perror("socket");
exit(0);
}
if (ioctl(s, SIOCGARP, &arpreq) < 0) {
perror("ioctl");
exit(0);
}
printf("IP address: %s\n", inet_ntoa(sin->sin_addr));if (arpreq.arp_flags & ATF_COM) {
eap = (unsigned char *) &arpreq.arp_ha.sa_data[0];
printf("Ethernet address: X:X:X:X:X:X",
eap[0], eap[1], eap[2], eap[3], eap[4], eap[5]);
if (arpreq.arp_flags & ATF_PERM) printf(" PERM");
if (arpreq.arp_flags & ATF_PUBL) printf(" PUBLISHED");
if (arpreq.arp_flags & ATF_USETRAILERS) printf(" TRAILERS");
if (arpreq.arp_flags & ATF_PROXY) printf(" PROXY");
printf("\n");
} else {
printf("*** INCOMPLETE ***\n");
}
close(s);
}
ИМХО:сокет надо забиндить на конкретный интерфейс.
На С я не писал таких штук, но что-то, про что в файле написаноOriginal code from: https://www.phillips321.co.uk/2012/07/24/python-arp-ping-code/
у меня работало.
А arping для этого не подойдет ?
> А arping для этого не подойдет ?Не проверял, не знаю.
Решение проблемы:Нужно перед ioctl добавить
strcpy(arpreq.arp_dev, "eth0");
> Здравствуйте!
> Скажите пожалуйста, как можно узнать MAC-адрес устройства в локальной сети, зная его IP?rv@guru:~$ /usr/sbin/arp 192.168.7.10
Address HWtype HWaddress Flags Mask Iface
noc-**01.f***.com ether 00:15:5d:07:37:00 C eth0