Getarp.c
/*============================================================================
Name : Getarp.c
Author : Haier
Version : 1.01
Copyright : Copyright (c) 2014
Description : Getarp in C, Compile by Gcc
============================================================================*/
#include <stdio.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <net/if_arp.h>
#include <string.h>
#include <unistd.h>
#include <sys/ioctl.h>
#include <errno.h>
int main(int argc, char *argv[])
{
int fd;
struct arpreq arpreq;
struct sockaddr_in *addr = (struct sockaddr_in*)&arpreq.arp_pa;
unsigned char *hw;
int err = -1;
if(argc < 2)
{
printf("usage: Getarp ip\n");
return -1;
}
fd = socket(AF_INET, SOCK_DGRAM, 0);
if(fd < 0)
{
printf("Sock Error: %s\n",strerror(errno));
return -1;
}
addr->sin_family = AF_INET;
addr->sin_addr.s_addr = inet_addr(argv[1]);
if(addr->sin_addr.s_addr == INADDR_NONE)
{
printf("Ip addr Error: %s\n",strerror(errno));
return -1;
}
strcpy(arpreq.arp_dev, "eth1");
err = ioctl(fd,SIOCGARP,&arpreq);
if(err < 0)
{
printf("Ioctl Error: %s\n", strerror(errno));
return -1;
}
hw = (unsigned char*)&arpreq.arp_ha.sa_data;
printf("[IP]%s:",argv[1]);
printf("\t[MAC]%0x2:%02x:%02x:%02x:%02x:%02x\n", hw[0],hw[1],hw[2],hw[3],hw[4],hw[5]);
close(fd);
return 0;
}
[Lenovo@Linux Ping]$ ./Getarp.o 192.168.64.2
[IP]192.168.64.2: [MAC]02:50:56:f8:de:9c