如何在Linux和Mac OSx中获得更高级的网络接口卡类型

时间:2013-06-26 18:39:24

标签: c linux macos network-programming network-interface

使用Windows API GetAdaptersAddresses,我们可以获得有关系统上所有网络接口卡的非常详细的信息。除了所有其他有用的信息,我还想关注结构IP_ADAPTER_ADDRESSES IfType 字段。如果您看到,那么您会发现Ipifcons.h中定义了 244 可能的值,这些类型由Internet Assigned Names Authority(IANA)定义。

我的问题是,以编程方式,是否有任何方法,如Linux API或ioctls,使用Linux和Mac可能获得此类特定的接口类型信息?

1 个答案:

答案 0 :(得分:0)

没有直接的等价物。 Windows API混合了两个属性:协议和驱动程序。

要获得接口协议(以太网,ATM,环回,火线),您可以使用SIOCGIFHWADDR ioctl,它将返回" Link Encapsulation"。在大多数计算机中,它将是环回或以太网(大多数设备,包括Wifi,隧道等......都是以太网)。此信息显示为“ifconfig'工具:

$ ifconfig | grep encap
eth0      Link encap:Ethernet  HWaddr 00:21:cc:xx:xx:xx
lo        Link encap:Local Loopback  
virbr0    Link encap:Ethernet  HWaddr 00:00:00:00:00:00  
wlan0     Link encap:Ethernet  HWaddr 00:24:d7:xx:xx:xx

要获取接口驱动程序,可以浏览/ sys / class / net / INTERFACE / device / path。然后你可以使用各种启发式方法:

# get driver name
$ readlink /sys/class/net/eth0/device/driver
../../../bus/pci/drivers/e1000e
$ readlink /sys/class/net/wlan0/device/driver
../../../../bus/pci/drivers/iwlwifi

# check if it is wifi or not
$ ls -l /sys/class/net/wlan0/wireless/status
-r--r--r-- 1 root root 4096 Sep  2 15:42 /sys/class/net/wlan0/wireless/status
$ ls -l /sys/class/net/eth0/wireless/status
ls: cannot access /sys/class/net/eth0/wireless/status: No such file or directory
相关问题