免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 2283 | 回复: 7
打印 上一主题 下一主题

获取MAC地址 ??? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2005-04-18 16:53 |只看该作者 |倒序浏览
请问,如何在程序当中获取局域网里机器的所有ip地址与其对应的MAC地址.

OS : RedHat Linux9.0

我下载了一些本论坛的代码, 没有一个可以编译过去的, 提示都是些宏找不到,
我就搜索/usr/include/下的所有文件,唉,好难找啊. 有些头文件都找不到. 郁闷
啊, 那位有写好的代码给share一下咯. 小弟感谢了. 谢谢!

论坛徽章:
0
2 [报告]
发表于 2005-04-18 17:14 |只看该作者

获取MAC地址 ???

如果有代码的(函数), 最好是把那些包含的头文件提供详细些,谢谢了!

论坛徽章:
0
3 [报告]
发表于 2005-04-18 18:16 |只看该作者

获取MAC地址 ???

什么头文件和宏找不到?

论坛徽章:
0
4 [报告]
发表于 2005-04-18 18:26 |只看该作者

获取MAC地址 ???

#include <stdio.h>;
#include <stdlib.h>;
#include <string.h>;
#include <netdb.h>;
#include <arpa/inet.h>;
#include <netinet/in.h>;
#include <sys/types.h>;
#include <sys/socket.h>;
#include <sys/ioctl.h>;
#include <net/if.h>;
#include <net/if_arp.h>;
#include <net/ethernet.h>;
#include <signal.h>;
#include <netinet/ip.h>;
#include <errno.h>;

int errno ;

struct in_addr myself,mymask;
int fd_arp;
struct ifreq ifr;

int main(int argc,char* argv[])
{
   char device[32];
   struct sockaddr from,to;
   int fromlen;
   struct sockaddr_in *sin_ptr;
   u_char *ptr;
   int n;

   strcpy(device,"lo";
   if((fd_arp=socket(AF_INET,SOCK_PACKET,htons(0x0806)))<0)
   {
       perror("arp socket error";
       printf("Open Socket Error:%d  fd:%d\n", errno,fd_arp);
       exit(-1);
   }

   strcpy(ifr.ifr_name,device);
   if(ioctl(fd_arp,SIOCGIFADDR,&ifr)<0)
   {
       perror("ioctl SIOCGIFADDR error";
       exit(-1);
   }
      sin_ptr=(struct sockaddr_in *)&ifr.ifr_addr;
   myself=sin_ptr->;sin_addr;

   // get network mask
   if(ioctl(fd_arp,SIOCGIFNETMASK,&ifr)<0)
   {
        perror("ioctl SIOCGIFNETMASK error";
        exit(-1);
   }

   sin_ptr=(struct sockaddr_in *)&ifr.ifr_addr;
   mymask=sin_ptr->;sin_addr;

   // get mac address
   if(ioctl(fd_arp,SIOCGIFHWADDR,&ifr)<0)
   {
        perror("ioctl SIOCGIFHWADDR error";
        exit(-1);
   }
   ptr=(u_char *)&ifr.ifr_ifru.ifru_hwaddr.sa_data[0];
   printf("\nrequest mac %02x:%02x:%02x:%02x:%02x:%02x,",
       *ptr,*(ptr+1),*(ptr+2),*(ptr+3),*(ptr+4),*(ptr+5));
   printf("\nrequest netmask %s",inet_ntoa(mymask));

   printf("\nrequest IP %s\n",inet_ntoa(myself));
   exit(0) ;
}

这段代码中, if((fd_arp=socket(AF_INET,SOCK_PACKET,htons(0x0806)))<0) 为什么不能创建,总是返回
  arp socket error: Operation not permitted
   Open Socket Error:29  fd:-1
为什么第三个参数是个整数啊.

我在RedHat Linux9.0 下编译是OK了, 就是不能创建socket.
我的编译:  g++ -o filemac  filemac.cpp   .........OK
g++ :  gcc version 3.2.2 20030222 (Red Hat Linux 3.2.2-5)

论坛徽章:
0
5 [报告]
发表于 2005-04-27 20:06 |只看该作者

获取MAC地址 ???

无应答了。。。

论坛徽章:
0
6 [报告]
发表于 2005-07-04 12:10 |只看该作者

获取MAC地址 ???

呀,我用你的程序,运行没有提示出错。。。。。。结果正确

论坛徽章:
0
7 [报告]
发表于 2005-07-04 13:20 |只看该作者

获取MAC地址 ???

不是提示你没有权限吗?用root

论坛徽章:
0
8 [报告]
发表于 2005-09-03 16:08 |只看该作者

获取MAC地址 ???

request mac 00:00:00:00:00:00,
request netmask 255.0.0.0
request IP 127.0.0.1
MAC地址怎么会是前零啊?
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP