在 AIX 上使用 ioctl 的网络接口的硬件地址

Posted

技术标签:

【中文标题】在 AIX 上使用 ioctl 的网络接口的硬件地址【英文标题】:Hardware address of network interface using ioctl on AIX 【发布时间】:2014-08-28 06:37:35 【问题描述】:

我想使用ioctl 获取AIX 上网络接口的硬件地址。 就像在 Linux 中一样,我们可以通过:

ioctl(sockFd, SIOCGIFADDR, ifr_p);

我没有在AIX 上的/usr/include/sys/ioctl.h 中找到SIOCGIFADDR 标志以获取硬件地址信息。

有什么方法可以从ioctl 得到它吗?或系统中的任何文件,我可以从中获取此信息,例如在 linux 中,此信息存储在“/sys/class/net/”中

【问题讨论】:

你是说IP地址,还是写SIOCGIFHWADDR? (在这两种情况下,请尝试搜索getkerninfo。) 它的SIOCGIFHWADDR,基本上我想获取AIX上可用网络接口的硬件地址 那么 getkerninfo 就是您要搜索的内容。 【参考方案1】:

有很多可用的示例代码,请参阅here 或here。基本上,您必须使用KINFO_NDD 参数调用getkerninfo,然后从该调用填充的kinfo_ndd 结构的ndd_addr 字段中读取地址。

【讨论】:

非常感谢你的工作:) 再澄清一下 getKerninfo 也适用于 solaris 和 HP-UX? 不,对于 HP,您需要 NETSTAT ioctl。见here。 @Philip 关于 ndd_type、NDD_ETHER 或 NDD_ISO88023 用于以太网。 Wlan 有 ndd_type 吗?我查看了 ndd.h 但没有找到,否则我可能会忽略它 实际上,如果我不这样做,我想获得所有可用的网络接口;不使用 ndd_type getkerninfo 过滤它们会给我网络接口和网络适配器。我只想获取网络接口而不是网络适配器。【参考方案2】:

您可以使用grep -w SIOCGIFADDR /usr/include 之类的内容轻松检测所需的包含文件。这可能给出的不是推荐的头文件,而是更深的头文件,但至少这是一个线索。

一般来说,BSD 风格表示正确的头文件是 。我怀疑 AIX 已更改为使其无法正常工作。此外,应该可以使用方便的包装器getifaddrs()

【讨论】:

我试过 getifaddrs() 但 ifaddrs.h 在 AIX 上不存在 您是否尝试在 中搜索 SIOCGIFADDR?

以上是关于在 AIX 上使用 ioctl 的网络接口的硬件地址的主要内容,如果未能解决你的问题,请参考以下文章

AIX 是不是支持 SIOCGLIFCONF?

在 node.js (ioctl SIOCGIFCONF) 中检索网络接口列表

什么是网络 ioctl 手册页?

使用 Python 向网络驱动程序发送 IOCTL 调用

Linux下获取网络接口信息

如何在 Free Pascal 上为接口列表或其他 ioctl 调用 ioctl?