#include <stdlib.h>
#include <stdio.h>
#include <net/if_arp.h>
#include <sys/ioctl.h>
#include <netinet/in.h>
#include <arpa/inet.h>
int main (int argc, char *argv[])
{
struct sockaddr_in sin = {0};
struct Arpreq myarp = {{0}};
int sockfd;
unsigned char *ptr;
if (argc!=2) {
printf ("Usage:%s <ip address>\n", argv[0]);
Exit (0);
}
sin.sin_family = af_inet;
if (Inet_aton (argv[1], &sin.sin_addr) ==0) {
printf ("%s:ip address '%s ' not valid\n", argv[0],argv[1]);
Exit (0);
}
memcpy (&MYARP.ARP_PA, &sin, sizeof (MYARP.ARP_PA));
strcpy (Myarp.arp_dev, "eth0");
if ((SOCKFD = socket (af_inet, SOCK_DGRAM, 0)) = = = 1) {
printf ("%s:cannot open socket\n", argv[0]);
Exit (0);
}
if (IOCTL (SOCKFD, Siocgarp, &myarp) = =-1) {
printf ("%s:no entry in Arp_cache for '%s ' \ n", argv[0],argv[1]);
Exit (0);
}
PTR = &myarp.arp_ha.sa_data[0];
printf ("%s:mac address for '%s ' is:", argv[0],argv[1]);
printf ("%x:%x:%x:%x:%x:%x\n", *ptr, * (ptr+1), * (ptr+2), * (ptr+3), * (PTR+4), * (ptr+5));
return 1;
}
[Email protected]/test]$./getmac 192.168.1.100
./getmac:no entry in Arp_cache for ' 192.168.1.100 '
[Email protected]/test]$./getmac 192.168.1.1
./getmac:mac address for ' 192.168.1.1 ' is:6c:e8:73:e4:3c:80
Original address: http://blog.csdn.net/suiyuan19840208/article/details/8483026
Go OpenWrt Get MAC Address