Как получить более продвинутый тип сетевой карты в Linux и Mac OSx

Использование Windows API GetAdaptersAddresses, мы можем получить очень подробную информацию обо всех сетевых картах в системе. Наряду со всей другой полезной информацией я хотел бы сосредоточиться на структуре IP_ADAPTER_ADDRESSES поле IfType. ЕСЛИ вы видите, тогда вы обнаружите, что существует 244 возможных значений, определенных в Ipifcons.h, и эти типы определены Internet Assigned Names Authority (IANA).

У меня вопрос, программно, есть ли ЛЮБОЙ способ, например Linux API или ioctls, получить такую ​​конкретную информацию о типе интерфейса с помощью Linux и, возможно, Mac?


person Khaled    schedule 26.06.2013    source источник


Ответы (1)


Прямого эквивалента нет. Windows API сочетает в себе два свойства: протокол и драйвер.

Чтобы получить протокол интерфейса (Ethernet, ATM, Loopback, firewire), вы можете использовать SIOCGIFHWADDR ioctl, который вернет «Link Encapsulation». На большинстве компьютеров это будет либо кольцевая проверка, либо Ethernet (большинство устройств, включая Wi-Fi, туннели и т. Д., Являются Ethernet). Эту информацию показывает инструмент 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
person theamk    schedule 02.09.2013