Chinaunix首页 | 论坛 | 博客
  • 博客访问: 243125
  • 博文数量: 55
  • 博客积分: 2160
  • 博客等级: 大尉
  • 技术积分: 598
  • 用 户 组: 普通用户
  • 注册时间: 2010-03-08 14:36
文章分类

全部博文(55)

文章存档

2013年(1)

2012年(5)

2010年(49)

我的朋友

分类: LINUX

2010-03-10 11:33:27

#include
#include
#include
#include
#include
#include
 
int Main(char *ip,char * mac)
{
 int sockfd;
 unsigned char *ptr;
 struct arpreq arp_req;
 struct sockaddr_in *sin;
 struct sockaddr_storage ss;
 char addr[50];

 memset(addr,0,sizeof(addr));
 memset(&ss,0,sizeof(ss));


 sockfd=socket(AF_INET,SOCK_DGRAM,0);
 if(sockfd < 0)
 {
  debugf("socket error\n");
  return -1;
 }
 memset(&arp_req,0,sizeof(arp_req));
 sin = (struct sockaddr_in *) &ss;
 arp_req.arp_pa.sa_family = AF_INET;
 
 sin->sin_family = AF_INET;
 if(inet_pton(AF_INET,ip,&(sin->sin_addr)) <= 0)
 {
  debugf("inet_aton error ...\n");
  close(sockfd);
  return -1;
 }
 
 
 sin = (struct sockaddr_in *) &arp_req.arp_pa;
 memcpy(sin,&ss,sizeof(struct sockaddr_in));
 strcpy(arp_req.arp_dev,"eth0");
 strcpy(arp_req.arp_dev,InterfaceName);
 arp_req.arp_ha.sa_family = AF_UNSPEC;
 
 if(ioctl(sockfd,SIOCGARP,&arp_req) < 0)
 {
  debugf("ioctl SIOCGARP: error\n");
  close(sockfd);
  return -1;
 }
 ptr = (unsigned char *) arp_req.arp_ha.sa_data;
// debugf("%x:%x:%x:%x:%x:%x\n",*ptr,*(ptr+1),*(ptr+2),*(ptr+3),*(ptr+4),*(ptr+5));
 sprintf(mac,"%x:%x:%x:%x:%x:%x",*ptr,*(ptr+1),*(ptr+2),*(ptr+3),*(ptr+4),*(ptr+5));
// debugf("Mac = %s ... \n",mac);
 close(sockfd);
 return 0;
}
阅读(1135) | 评论(2) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2010-04-09 15:34:52

呵呵。。那下来不用改就可以用。。

chinaunix网友2010-04-09 15:33:53

好东西!谢谢版主