macOS:从网络设备名称获取设备名
Posted afatgoat
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了macOS:从网络设备名称获取设备名相关的知识,希望对你有一定的参考价值。
先从ifconfig命令说起,这个命令后面可以跟上一个叫做interface的参数,就可以查看该interface所代表的网络设备的网络情况,比如:
ifconfig en0; ifconfig en1
一般来说,从这里很难看出这个en0和en1那个是无线网卡、那个是有线网。尤其是新版的laptop没有有线网卡,那么en0就是无线网卡。
为了动态获得WiFi对应的是哪个设备,我们需要使用networksetup命令的帮助。
networksetup命令有一个-listallhardwareports的命令,给出下面形式的系统网络配置信息:
$ networksetup -listallhardwareports
Hardware Port: Ethernet
Device: en0
Ethernet Address: 10:dd:b1:d0:78:98
Hardware Port: FireWire
Device: fw0
Ethernet Address: 44:fb:42:ff:fe:55:7f:ea
Hardware Port: Wi-Fi
Device: en1
Ethernet Address: 88:1f:a1:10:75:7e
Hardware Port: Bluetooth PAN
Device: en3
Ethernet Address: a8:bb:cf:0e:6e:71
Hardware Port: Thunderbolt 1
Device: en2
Ethernet Address: d2:00:15:57:fe:a0
Hardware Port: Thunderbolt 网桥
Device: bridge0
Ethernet Address: d2:00:15:57:fe:a0
VLAN Configurations
===================
如果运行networksetup -h,还可以看到最开始的命令行,比如:networksetup -listallnetworkservices。在往下看,networksetup命令行中有好多称呼,什么networksevice, device, device name, service name等等。看到这里,可以感受到macOS内部对于网络接口的混乱称呼,而且还有hardware ports, 在加上ifconfig中的interface,真不知道他们到底是什么鬼,干嘛搞出这多名词。
其实,只要记住,他们就是两类,一类是设备名,一类是服务名- 设备名有:interface, device, device name
- 服务名有:hardware ports, networksevice, service name
我们的任务就是在服务名和设备名之间转化。本文所想描述的是从服务名获得相应的设备名,从而可以使用ifconfig之类的命令操作给设备。
1 最简单的命令行:
wifi=$(/usr/sbin/networksetup -listallhardwareports | /usr/bin/awk '/Wi-Fi|AirPort/ getline; print $NF')
上面一行可以说是,最简单的一行了,主要使用了awk命令。但是他有一个假设就是输出行的顺序必须是
Hardware Port: Wi-Fi
Device: en1
还有一点需要注意的,在老版本的mac OS X中,最早使用Airport代表Wi-Fi的,该命令更通用。
2 bash数组示范
下面我们使用bash的数组功能做一个函数获得任意服务名对应的设备名:
function findDevice()
mDev="$1"
IFS=$'\\n'
port=($(networksetup -listallhardwareports | grep "Hardware"))
devices=($(networksetup -listallhardwareports | grep "Device"))
# echo $port[@], $devices[@]
for (( count=0; count<$#port[@]; count++ )); do
[[ "$port[$count]" = *"$mDev"* ]] && echo $devices[$count] | awk -F ": " 'print $2'; break; || true
done
exit 0
虽说通过上一节的命令也可以定义一个函数,但是这个例子可以演示数组的用法,而且不会依赖于networksetup命令显示中各行的前后顺序
用法:
wifi=$(findDevice "Wi-Fi")
echo "Wi-Fi=($wifi)"
found=$(findDevice "Thunderbolt")
echo "Thunderbolt=($found)"
最后:
结合airport命令可以对WiFi进行详尽的配置:
/System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport /usr/sbin/airport $wifi prefs
以上是关于macOS:从网络设备名称获取设备名的主要内容,如果未能解决你的问题,请参考以下文章