linux 脚本获取当前链接 wifi 的网卡名称

发布时间: 更新时间: 总字数:880 阅读时间:2m 作者: IP上海 分享 网址

要在 Linux 中编写一个脚本来获取当前连接 Wi-Fi 的网卡名称,可以使用 iwconfig 命令,并结合一些文本处理工具如 grepawk 来提取相关信息。

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

这个脚本的工作原理如下:

  1. 使用 iwconfig 命令获取所有无线网卡的信息,并将其输出存储在变量 iwconfig_output 中。
  2. 使用 while 循环遍历 iwconfig_output 的每一行。
  3. 如果某一行包含字符串 ESSID:,则认为这是当前连接 Wi-Fi 的网卡信息。
  4. 使用 awk 命令提取这一行的第一个字段,即网卡名称。
  5. 输出网卡名称并退出循环。

通过这种方式,你可以自动获取当前连接 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

正则表达式说明:

  1. ESSID:"(.*?)" 匹配无线网络名称(格式:ESSID:"value"

  2. Frequency:([\d.]+) GHz 匹配频率值(格式:Frequency:5.745 GHz

  3. Access Point: ([0-9A-Fa-f:]{17}) 匹配 MAC 地址(格式:00:11:22:33:44:55

  4. Bit Rate=([\d.]+) Mb/s 匹配传输速率(格式:Bit Rate=54.0 Mb/s

  5. Tx-Power=([\d.]+) dBm 匹配发射功率(格式:Tx-Power=20 dBm

  6. Link Quality=(\d+/\d+) 匹配链路质量(格式:Link Quality=70/70

  7. Signal level=([-\d]+) dBm 匹配信号强度(格式:Signal level=-50 dBm

注意事项:

  • 如果某些值不存在(例如未连接 WiFi),对应的键会缺失
  • 需要根据实际输出调整正则表达式
  • 建议先打印 iwconfig mlan0 的实际输出,再微调正则表达式
  • 如果接口名称不同,修改 interface 参数即可
Home Archives Categories Tags Statistics
本文总阅读量 次 本站总访问量 次 本站总访客数