论坛风格切换切换到宽版
  • 791阅读
  • 7回复

[问题求助]获取MAC地址 ??? [复制链接]

上一主题 下一主题
离线伊泽浩.
 
发帖
2034
C币
-505373
威望
375
贡献值
2
银元
-3
铜钱
4523
人人网人气币
0
只看楼主 倒序阅读 使用道具 楼主  发表于: 2009-05-01
请问,如.何在程序当中获取局域网里机器.的所有ip地址与其对应的MAC地址.投资

OS : RedHat .Linux9.0.

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

评价一下你浏览此帖子的感受

精彩

感动

搞笑

开心

愤怒

无聊

灌水
发帖
2133
C币
-281463
威望
428
贡献值
1
银元
-3
铜钱
4887
人人网人气币
0
只看该作者 沙发  发表于: 2010-04-13
Re:获取MAC地址
如果有代码的(函数), 最好是把那些包含的头文件提供详细些,谢谢了!

发帖
2086
C币
-60314
威望
409
贡献值
1
银元
-1
铜钱
4738
人人网人气币
0
只看该作者 板凳  发表于: 2010-04-13
Re:获取MAC地址
什么头文件和宏找不到?

离线tanweihai.
发帖
2003
C币
-193495
威望
363
贡献值
1
银元
-3
铜钱
4592
人人网人气币
0
只看该作者 地板  发表于: 2010-04-13
Re:获取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)

离线帅帅.
发帖
1994
C币
-235618
威望
373
贡献值
1
银元
-4
铜钱
4429
人人网人气币
0
只看该作者 4楼 发表于: 2010-04-13
Re:获取MAC地址
无应答了。。。

离线bearfish.
发帖
1951
C币
-199201
威望
361
贡献值
1
银元
-3
铜钱
4388
人人网人气币
0
只看该作者 5楼 发表于: 2010-04-13
Re:获取MAC地址
呀,我用你的程序,运行没有提示出错。。。。。。结果正确

发帖
2021
C币
-235653
威望
381
贡献值
1
银元
-1
铜钱
4484
人人网人气币
0
只看该作者 6楼 发表于: 2010-04-13
Re:获取MAC地址
不是提示你没有权限吗?用root

发帖
2258
C币
-198163
威望
433
贡献值
1
银元
-2
铜钱
5064
人人网人气币
0
只看该作者 7楼 发表于: 2010-04-13
Re:获取MAC地址
request mac 00:00:00:00:00:00,
request netmask 255.0.0.0
request IP 127.0.0.1
MAC地址怎么会是前零啊?
快速回复
限100 字节
批量上传需要先选择文件,再选择上传
 
上一个 下一个