通过IP和socket获取对方的MAC地址

来源:互联网 发布:mac光影 编辑:程序博客网 时间:2024/05/01 12:19
#include <netinet/if_ether.h>

/*
  * FUNC: Get peer MAC address by socket built
  * PARAM: ifname--network interface name; peerip--peer ip address; sockfd--socket ; buf--MAC address, buflen--buf size;
  * RET: 0--OK; else--Fail
  */
int getpeermac(char *ifname, struct sockaddr_in *peerip, int sockfd, char *buf , int buflen) 

int ret = -1;  
struct arpreq arpreq;  


if(ifname==NULL || peerip==NULL || buf==NULL)
return -1;

memset( &arpreq, 0, sizeof( struct arpreq ));  
memcpy( &arpreq.arp_pa, peerip, sizeof( struct sockaddr_in ));  
strcpy(arpreq.arp_dev, ifname);  
arpreq.arp_pa.sa_family = AF_INET;  
arpreq.arp_ha.sa_family = AF_UNSPEC;  
if( ioctl( sockfd, SIOCGARP, &arpreq ) < 0 ) {
printf("ioctl SIOCGARP error from %s", ifname);
return -1;
}
else  
{  
unsigned char* ptr = (unsigned char *)arpreq.arp_ha.sa_data;  
memcpy(buf, ptr, 6);
ret = 0;
}  


return ret;  
}      
0 0
原创粉丝点击