我想获取所有活动网络接口的列表(例如 eth0、wlan0)。我假设我必须解析是否配置,但不同操作系统的格式不同。有没有人有一种可移植的方式来获取此信息,以便可以在大多数 unices(linux、*bsd、mac)上使用。
答案1
不确定可移植性,因为网络接口列表可能与内核实现有关,而 linux 与 *bsd/mac 完全无关...但是如果 ifconfig 不适合你,你可以尝试netstat -i
答案2
查看因素包。它主要由 puppet 配置管理程序用来从已安装的机器中获取元数据,但它可以以独立方式运行以实现类似目的。其输出确实包括有关在机器上找到的网络接口的信息,并且其格式在各个平台上都是一致的。
示例输出:
user@host:~$ facter
architecture => i386
domain => members.linode.com
facterversion => 1.3.8
fqdn => host.members.linode.com
hardwareisa => unknown
hardwaremodel => i686
hostname => host
id => user
ipaddress => 1.2.3.4
ipaddress_eth0 => 1.2.3.4
kernel => Linux
kernelrelease => 2.6.32.16-linode28
lsbdistcodename => hardy
lsbdistdescription => Ubuntu 8.04.4 LTS
lsbdistid => Ubuntu
lsbdistrelease => 8.04
macaddress => 76:c9:3e:0b:xx:xx
macaddress_eth0 => fe:fd:43:12:xx:xx
memoryfree => 393.08 MB
memorysize => 498.68 MB
operatingsystem => Debian
operatingsystemrelease => 2.6.32.16-linode28
processor0 => Intel(R) Xeon(R) CPU L5335 @ 2.00GHz
processor1 => Intel(R) Xeon(R) CPU L5335 @ 2.00GHz
processor2 => Intel(R) Xeon(R) CPU L5335 @ 2.00GHz
processor3 => Intel(R) Xeon(R) CPU L5335 @ 2.00GHz
processorcount => 4
ps => ps -ef
rubysitedir => /usr/local/lib/site_ruby/1.8
rubyversion => 1.8.6
swapfree => 186.84 MB
swapsize => 255.99 MB
uniqueid => 007f0101
答案3
以下将返回所有常见 Linux 发行版上的活动接口列表:
ifconfig | grep "Link encap" | awk '{ print $1 '}
如果您还想包括当前处于关闭状态(不活动)的接口,只需添加 -a 标志,如下所示:
ifconfig -a | grep "Link encap" | awk '{ print $1 '}
据我所知,没有可以在任何 POSIX 系统上使用的通用方法来检索网络接口列表,因此您必须针对当前正在使用的操作系统本地化您的命令。
答案4
Netstat -i 和 ifconfig 只会显示当前“活动”的网络接口。活动接口也可能没有载体,因此无法使用。您需要查找 RUNNING 标志(ifconfig)或 R 标志(netstat -i)。此标志表示接口具有活动载体,或者最常见的是网络接口物理连接到某个东西,例如交换机。