我一直在运行一个 bash 脚本,它更新主机表并测试与特定主机的连接。它在许多机器上成功运行。在此过程中,它使用以下命令检查与给定主机的通信
ping -I wlan0 <host>
和
ping -I eth0 <host>
这工作得很好,直到我尝试在一台(唯一的)无线设备是 udev 恶作剧的受害者的机器上使用它(与此类似),有时使用 wlan0,有时使用 wlan1。
有没有一种可靠的方法可以编写我的 bash 脚本来与任意 wlanX 设备进行 ping 操作,而无需编写代码来识别机器在某一天更喜欢使用哪一个设备?
答案1
您可以识别使用此命令使用的接口(以 root 身份运行):
iwconfig 2>/dev/null | grep -o "^\w*"
输出将是,例如:
wlan0
您必须将答案保存在脚本的变量中
答案2
这两个命令中的任何一个都会列出您的非环回系统接口,因此您可以迭代它们:
ip link | awk '$1+0>1 {print substr($2,1,length($2)-1)}'
netstat -i | awk 'NR>2 && $1 != "lo" {print $1}'
或者,您可以调整awk
条件以仅打印以以下内容开头的行wlan
:
ip link | awk '$1+0 && $2 ~ /^wlan/ {print substr($2,1,length($2)-1)}'
netstat -i | awk 'NR>2 && $1 ~ /^wlan/ {print $1}'