由IP取得MAC

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


發佈了56 篇原創文章 · 獲贊 1 · 訪問量 6萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章