要在 Linux 中编写一个脚本来获取当前连接 Wi-Fi 的网卡名称,可以使用 iwconfig
命令,并结合一些文本处理工具如 grep
和 awk
来提取相关信息。
Bash 脚本示例
#!/bin/bash
# 使用 iwconfig 命令获取所有无线网卡的信息
iwconfig_output=$(iwconfig)
# 遍历每一行输出,查找包含 ESSID 的行
while IFS= read -r line; do
if [[ $line == *"ESSID:"* ]]; then
# 提取网卡名称
interface_name=$(echo "$line" | awk '{print $1}')
echo "当前连接 Wi-Fi 的网卡名称为: $interface_name"
break
fi
done <<< "$iwconfig_output"
保存上述脚本到一个文件中,比如命名为 get_wifi_interface.sh
,然后给它执行权限并运行:
chmod +x get_wifi_interface.sh
./get_wifi_interface.sh
这个脚本的工作原理如下:
- 使用
iwconfig
命令获取所有无线网卡的信息,并将其输出存储在变量 iwconfig_output
中。 - 使用
while
循环遍历 iwconfig_output
的每一行。 - 如果某一行包含字符串
ESSID:
,则认为这是当前连接 Wi-Fi 的网卡信息。 - 使用
awk
命令提取这一行的第一个字段,即网卡名称。 - 输出网卡名称并退出循环。
通过这种方式,你可以自动获取当前连接 Wi-Fi 的网卡名称。
Python 脚本示例
可以使用 Python3 的 re
模块结合正则表达式提取 iwconfig mlan0
命令输出中的值。以下是示例代码,假设需要提取常见的无线网络参数(如 ESSID、频率、信号强度等):
import re
import subprocess
def parse_iwconfig(interface="mlan0"):
# 执行命令获取输出
output = subprocess.check_output(["iwconfig", interface], text=True)
# 正则表达式提取关键参数
patterns = {
"ESSID": r'ESSID:"(.*?)"',
"Frequency": r'Frequency:([\d.]+) GHz',
"Access Point": r'Access Point: ([0-9A-Fa-f:]{17})',
"Bit Rate": r'Bit Rate=([\d.]+) Mb/s',
"Tx-Power": r'Tx-Power=([\d.]+) dBm',
"Link Quality": r'Link Quality=(\d+/\d+)',
"Signal Level": r'Signal level=([-\d]+) dBm'
}
results = {}
for key, pattern in patterns.items():
match = re.search(pattern, output)
if match:
results[key] = match.group(1)
return results
# 使用示例
if __name__ == "__main__":
try:
data = parse_iwconfig()
for k, v in data.items():
print(f"{k:12} : {v}")
except subprocess.CalledProcessError:
print("接口 mlan0 不存在或 iwconfig 命令未找到")
输出示例:
ESSID : MyWiFi
Frequency : 2.437
Access Point : 00:11:22:33:44:55
Bit Rate : 54.0
Tx-Power : 20
Link Quality : 70/70
Signal Level : -50
正则表达式说明:
ESSID:"(.*?)"
匹配无线网络名称(格式:ESSID:"value"
)
Frequency:([\d.]+) GHz
匹配频率值(格式:Frequency:5.745 GHz
)
Access Point: ([0-9A-Fa-f:]{17})
匹配 MAC 地址(格式:00:11:22:33:44:55
)
Bit Rate=([\d.]+) Mb/s
匹配传输速率(格式:Bit Rate=54.0 Mb/s
)
Tx-Power=([\d.]+) dBm
匹配发射功率(格式:Tx-Power=20 dBm
)
Link Quality=(\d+/\d+)
匹配链路质量(格式:Link Quality=70/70
)
Signal level=([-\d]+) dBm
匹配信号强度(格式:Signal level=-50 dBm
)
注意事项:
- 如果某些值不存在(例如未连接 WiFi),对应的键会缺失
- 需要根据实际输出调整正则表达式
- 建议先打印
iwconfig mlan0
的实际输出,再微调正则表达式 - 如果接口名称不同,修改
interface
参数即可