gpt4 book ai didi

c - 在 C 中找出 Linux 和 FreeBSD 上的 MAC 地址

转载 作者:IT王子 更新时间:2023-10-29 01:03:03 25 4
gpt4 key购买 nike

我试图找出 MAC 地址,并且我设法在 Linux 中使用 sysctl 创建了工作解决方案,问题是,这个解决方案不适用于我正在开发的 FreeBSD 版本。除了使用 sysctl 之外,还有什么方法可以在 C 中找到 mac 地址吗?

最佳答案

使用 libpcap 库。这是您能找到的最多平台的方式。

此库用于网络嗅探器和入侵检测,以及专门测量其他网络统计数据。 nethogs 实用程序用于测量每个进程的网络使用情况,iftop 用于测量每个机器/端口的带宽使用情况。在许多角色中都非常灵活。

用 C 语言编写,但有一些其他语言的包装器。

1 : http://en.wikipedia.org/wiki/Pcap
[2]: http://www.tcpdump.org
[3]:http://sourceforge.net/projects/libpcap/

编辑:这是一个完整、准确且有效的示例,其中包含详细的代码和功能:
http://coderrr.wordpress.com/2008/03/07/get-the-mac-address-of-a-local-ip/

有很多教程,源代码是您最好的 friend 。

编辑 2:blaze 指出 getifaddrs(3) 似乎可以完成这项工作,只是一些警告,它是一个非 posix 函数。是 glibc linux 支持但不提供文档的 bsd 函数。几乎是一个未记录的特色:-)

所有文档都是手册页,来自 kernel.org 上的手册:

Not in POSIX.1-2001. This function first appeared in BSDi and is present on the BSD systems, but with slightly different semantics documented--returning one entry per interface, not per address. This means ifa_addr and other fields can actually be NULL if the interface has no address, and no link-level address is returned if the interface has an IP address assigned. Also, the way of choosing either ifa_broadaddr or ifa_dstaddr differs on various systems.

The addresses returned on Linux will usually be the IPv4 and IPv6 addresses assigned to the interface, but also one AF_PACKET address per interface containing lower-level details about the interface and its physical layer. In this case, the ifa_data field may contain a pointer to a struct net_device_stats, defined in , which contains various interface attributes and statistics.

因此它的行为可能会有所不同,您可能必须 #ifndef 进行编译。

kernel.org 手册页位于 http://www.kernel.org/doc/man-pages/online/pages/man3/getifaddrs.3.html确实在其中提供了示例代码,这可能会有所帮助。与上面的链接相比,我的本地 linux 手册页相当差。

我仍然认为 libpcap 更便携,因为其他人已经完成了所有可移植性工作以及您通过使用它获得的所有额外功能。

希望这对您有所帮助。

关于c - 在 C 中找出 Linux 和 FreeBSD 上的 MAC 地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8288242/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com