1

使用 Windows API GetAdaptersAddresses,我们可以获得关于系统上所有网络接口卡的非常详细的信息。除了所有其他有用的信息,我喜欢关注结构IP_ADAPTER_ADDRESSESIfType字段。如果您看到,您会发现Ipifcons.h 中定义了244 个可能的值,这些类型由 Internet 名称分配机构 (IANA) 定义。

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

4

1 回答 1

0

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

要获取接口协议(以太网、ATM、环回、火线),您可以使用 SIOCGIFHWADDR ioctl,它将返回“链接封装”。在大多数计算机中,它将是环回或以太网(大多数设备,包括 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/ 路径。然后你可以使用各种启发式方法:

# 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
于 2013-09-02T19:43:45.167 回答