当前位置:  技术问答>linux和unix

!我如何才能编程获得网卡的MAC地址?

    来源: 互联网  发布时间:2015-10-07

    本文导语:  用Socket可以获得IP地址,在C++程序里用什么办法可以提取出来访问我服务器的各个client的MAC地址呢? | /*用C语言得到本机的硬件地址*/ #include #include #include #include #include #include #include #include#defi...

用Socket可以获得IP地址,在C++程序里用什么办法可以提取出来访问我服务器的各个client的MAC地址呢?

|
/*用C语言得到本机的硬件地址*/
#include
#include
#include
#include
#include
#include
#include
#include#defineMAXINTERFACES16intmain(argc,argv)
registerintargc;
registerchar*argv[];
{
register int fd,intrface,retn=0;
struct ifreq buf[MAXINTERFACES];
struct arpreq arp;
struct ifconf ifc;if((fd=socket(AF_INET,SOCK_DGRAM,0))>=0){
ifc.ifc_len=sizeof(buf);
ifc.ifc_buf=(caddr_t)buf;
if(!ioctl(fd,SIOCGIFCONF,(char*)&ifc)){
intrface=ifc.ifc_len/sizeof(structifreq);
printf("interfacenumisintrface=%dnnn",intrface);
while(intrface-->0){
printf("netdevice%sn",buf[intrface].ifr_name);/*Jugdewhetherthenetcardstatusispromisc*/
if(!(ioctl(fd,SIOCGIFFLAGS,(char*)&buf[intrface]))){
if(buf[intrface].ifr_flags&IFF_PROMISC){
   puts("theinterfaceisPROMISC");
   retn++;
}
}else{
charstr[256];sprintf(str,"cpm:ioctldevice%s",
   buf[intrface].ifr_name);
perror(str);
}/*Jugdewhetherthenetcardstatusisup*/
if(buf[intrface].ifr_flags&IFF_UP){
puts("theinterfacestatusisUP");
}else{
puts("theinterfacestatusisDOWN");
}/*GetIPofthenetcard*/
if(!(ioctl(fd,SIOCGIFADDR,(char*)&buf[intrface]))){
puts("IPaddressis:");
puts(inet_ntoa
   (((structsockaddr_in*)(&buf[intrface].
ifr_addr))->sin_addr));
puts("");
//puts(buf[intrface].ifr_addr.sa_data);
}else{
charstr[256];sprintf(str,"cpm:ioctldevice%s",
   buf[intrface].ifr_name);
perror(str);
}/*GetHWADDRESSofthenetcard*/
if(!(ioctl(fd,SIOCGIFHWADDR,(char*)&buf[intrface]))){
puts("HWaddressis:");printf("%02x:%02x:%02x:%02x:%02x:%02xn",
   (unsigned char)buf[intrface].ifr_hwaddr.
   sa_data[0],
   (unsigned char)buf[intrface].ifr_hwaddr.
   sa_data[1],
   (unsigned char)buf[intrface].ifr_hwaddr.
   sa_data[2],
   (unsigned char)buf[intrface].ifr_hwaddr.
   sa_data[3],
   (unsigned char)buf[intrface].ifr_hwaddr.
   sa_data[4],
   (unsigned char)buf[intrface].ifr_hwaddr.
   sa_data[5]);puts("");
puts("");
}else{
charstr[256];sprintf(str,"cpm:ioctldevice%s",
   buf[intrface].ifr_name);
perror(str);
}
}
}else
perror("cpm:ioctl");}else
perror("cpm:socket");close(fd);
return;
}
试试这个看行不,别的地方找的,我还没试过。

|
包含net/if_arp.h,其他的自己到if_arp.h里面去看吧……

|
使用ioctl函数了。
论坛随便一搜很多了。

    
 
 

您可能感兴趣的文章:

  • 我的网卡在redhat7.3下不能自动驱动,但我有for linux的驱动程序,请问如何才能驱动我的网卡,我是菜菜,请详细说明,谢谢!
  • 用户程序怎样才能得到网卡的收发数据流量?
  • 主机换网卡了,里头的虚拟机怎么配置才能使用正常
  • 怎么才能知道声卡、显卡、网卡的信息?如何安装驱动?请各位高手指点,谢谢!!!
  • 请问在DOS下联网时,如何才能改网卡的I/O地址
  • 用redhat9怎样配置网卡才能连上网,在线等待!!
  • 在Solaris 8下怎样才能修改网卡Mac地址???
  • linu下如何才能100%的证明网卡驱动程序是安好了。
  • RedHat Linux 9.0下上不了网,ifconfig只能看到回环网络,如何才能让识别网卡?
  • 用3G无线上网卡上网必须用sudo运行浏览器才能浏览网页!
  • 8139网卡驱动问题:如何才能让数据包立即发送
  • red hat7.3中有没有类似window中的设备管理器?我怎么样才能知道,我的某个设备是否正常工作,如网卡、声卡?
  • 我在win2000上装了vmware,并在vm上安装了rh9,现在出现三块网卡,我该怎么设置才能让linux访问internet?
  • 不知如何配置网络上网,我是用win2k server 服务器 共亨上网的,可网卡驱动在哪里可以装呢?如何配ip 和路由才能上网呢
  • 急!怎样才能获得javax.rmi包?
  • get_free_pages后获得的虚拟内存地址如何才能转换成物理地址?
  • 在JSP的领地里,怎么才能用最短的时间获得更多得知识~!!
  • 怎样才能获得jcreator长期版?
  • 菜鸟提问_怎样才能在linux下面获得ip地址
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 半路出家转行学编程如何才能成为大牛?
  • 修改了hosts.allow,怎么才能生效,是启动了哪个服务才能生效吗?
  • 请较:用window2000做网关,现在LINUX怎么设置才能才能通过它上网呢?
  • 在applet中怎么才能得到当前页面的接口,我的意思是说怎样才能改变比如说一个输入框中的内容
  • 请问xvfs是什么文件系统?怎样才能让linux认出?
  • 如何才能再次进入linux?
  • 提示文字怎样才能按多行显示?
  • 如何才能在java(vj环境下)播放声音?
  • 用什么软件才能打开后缀为.z的文件?
  • 为什么Component的组件要add后才能paint()?
  • 我怎么才能知道一个线程已经执行结束?
  • 请教各位高手一个简单的问题:在JAVA 中如何才能取得一些系统信息?
  • 怎样才能做出半透明的JMenuItem,有人会吗?
  • 我是一个JAVA初学者,不知道怎么才能进阶,大侠给点提示吧!!
  • 我怎样才能找到例子?
  • 请问怎样才能看到JavaScript原来的脚本语言?
  • 怎样才能取出JTextPane中某一行的文本呢?
  • Tomcat中怎樣才能設置session的過期時間?
  • 怎么样才能封住一些端口,不让别的计算机访问
  • 我怎么样才能检测到系统在发包和收包,及数量统计。
  • 怎样才能判断他的返回值JOptionPane.showConfirmDialog?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3