由IP取得MAC

来源:互联网 发布:java中级开发工程师 编辑:程序博客网 时间:2024/05/16 14:35

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


0 0
原创粉丝点击