使用Windows API GetAdaptersAddresses,我们可以获得有关系统上所有网络接口卡的非常详细的信息。除了所有其他有用的信息,我还想关注结构IP_ADAPTER_ADDRESSES的 IfType 字段。如果您看到,那么您会发现Ipifcons.h中定义了 244 可能的值,这些类型由Internet Assigned Names Authority(IANA)定义。
我的问题是,以编程方式,是否有任何方法,如Linux API或ioctls,使用Linux和Mac可能获得此类特定的接口类型信息?
答案 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