2014-08-28 75 views
0

我想使用ioctl获得网络接口的硬件地址AIX。 就像在Linux中,我们得到它通过:在AIX上使用ioctl的网络接口的硬件地址

ioctl(sockFd, SIOCGIFADDR, ifr_p); 

我没有对AIX找到/usr/include/sys/ioctl.hSIOCGIFADDR标志获得硬件地址信息。

有什么办法从ioctl得到它吗?或者系统中的任何文件,我可以从这里获取这些信息,比如在linux中这个信息存储在'/ sys/class/net /'中。

+0

你的意思是IP地址,还是要写'SIOCGIFHWADDR'? (在这两种情况下,尝试搜索'getkerninfo'。) – Phillip 2014-08-29 05:55:23

+0

其SIOCGIFHWADDR,基本上我想获得AIX上可用的网络接口的硬件地址 – diago 2014-09-02 05:27:54

+0

然后'getkerninfo'就是您要搜索的内容。 – Phillip 2014-09-03 10:04:06

回答

0

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

+0

非常感谢您的工作:)只是再一次澄清getKerninfo也可以在solaris和HP-UX上运行? – diago 2014-09-03 11:21:46

+0

不,对于HP,您需要NETSTAT' ioctl。见[这里](http://cplus.kompf.de/artikel/macaddr.html)。 – Phillip 2014-09-03 11:27:39

+0

@Philip 关于ndd_type,NDD_ETHER或NDD_ISO88023用于以太网。 Wlan有没有ndd_type?我查看了ndd.h,但没有找到或者我可能忽略了它 – diago 2014-09-04 09:06:39

0

您可以使用类似grep -w SIOCGIFADDR /usr/include的东西轻松检测到需要的包含文件。这可能不是推荐的头文件,而是更深的头文件,但至少这将是一个线索。

一般来说,BSD风格表示正确的头文件是<net/if.h>。我怀疑AIX是否改变,使其无法正常工作。另外,应该有一个方便的包装getifaddrs()

+0

我试过getifaddrs(),但是ifaddrs.h在AIX上不存在 – diago 2014-09-01 09:40:02

+0

您是否试过在中搜索SIOCGIFADDR? – Netch 2014-09-02 04:57:19

+0

是的,我做了,但没有找到SIOCGIFADDR – diago 2014-09-02 05:18:36

相关问题