免费注册 查看新帖 |

Chinaunix

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

如何用C编程获得HWaddr? 我现在用 /sbin/ifconfig eth0 , 从输出中找。 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2012-05-13 21:48 |只看该作者 |倒序浏览
如题。请问,如何用C编程获得HWaddr? 我的环境是 Linux Redhat Enterprise Release 4.6 ,我的编译器是 gcc 。

我本来用  /sbin/ifconfig  eth0 来查询 HWaddr。
但是,见我在Linux环境编程版中一个帖子,有高手回答说不同网卡这个格式可能不同。
那么我在不知道所有网卡这条指令和格式的情况下,就没有办法在流程中自动获得HWaddr了。
要知道我的流程并不仅是我们内部使用,而是还可能给未知的使用者来用。
所以我希望能够通过C语言编程来实现这一点。请问如何做到?

谢谢。

论坛徽章:
0
2 [报告]
发表于 2012-05-13 22:11 |只看该作者
看下ifconfig的代码,看它调用了哪几个 ioctl 即可。

论坛徽章:
5
技术图书徽章
日期:2013-11-07 13:21:58技术图书徽章
日期:2013-12-07 10:34:46技术图书徽章
日期:2014-04-23 08:50:31双鱼座
日期:2014-09-16 09:12:34亥猪
日期:2015-01-23 13:37:49
3 [报告]
发表于 2012-05-14 00:01 |只看该作者
lz可以看看busybox中的ifconfig实现。

论坛徽章:
0
4 [报告]
发表于 2012-05-14 11:28 |只看该作者
strace ifconfig就知道用了哪个ioctl了:SIOCGIFHWADDR
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <sys/ioctl.h>
  4. #include <sys/types.h>
  5. #include <sys/socket.h>
  6. #include <netinet/in.h>
  7. #include <arpa/inet.h>
  8. #include <net/if.h>

  9. int getmac(char *ethname, char *macbuf)
  10. {
  11.         int sock;
  12.         struct ifreq iface;
  13.         char tmp_mac[10];

  14.         sock = socket(PF_INET, SOCK_DGRAM, 0);
  15.         strcpy(iface.ifr_name, ethname);

  16.         if(ioctl(sock, SIOCGIFHWADDR, &iface) != 0) {
  17.                 close(sock);
  18.                 return 1;
  19.         }

  20.         memcpy(tmp_mac, iface.ifr_hwaddr.sa_data, 6);
  21.         sprintf(macbuf, "%02X:%02X:%02X:%02X:%02X:%02X",
  22.                 tmp_mac[0] & 0xFF, tmp_mac[1] & 0xFF, tmp_mac[2] &0xFF,
  23.                 tmp_mac[3] & 0xFF, tmp_mac[4] & 0xFF, tmp_mac[5] & 0xFF);
  24.         return 0;
  25. }

  26. int main(void)
  27. {
  28.         char buf[256];

  29.         getmac("eth0", buf);
  30.         puts(buf);
  31.         return 0;
  32. }
复制代码

论坛徽章:
0
5 [报告]
发表于 2012-05-15 12:30 |只看该作者
谢谢。非常好用。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP