在 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 风格表示正确的头文件是 getifaddrs()
。
【讨论】:
我试过 getifaddrs() 但 ifaddrs.h 在 AIX 上不存在 您是否尝试在以上是关于在 AIX 上使用 ioctl 的网络接口的硬件地址的主要内容,如果未能解决你的问题,请参考以下文章