使用 Python 扫描 Windows 下的 Wi-Fi 网络实例演示

使用 Python 扫描 Windows 下的 Wi-Fi 网络

  • 代码实现
  • 代码解析
    • [1. 导入库](#1. 导入库)
    • [2. 解码混合编码](#2. 解码混合编码)
    • [3. 扫描 Wi-Fi 网络](#3. 扫描 Wi-Fi 网络)
    • [4. 运行函数](#4. 运行函数)

这是我当前电脑的 wifi 连接界面。

这个是运行的效果图:

代码实现

我们使用了 Pythonsubprocess 模块来调用 Windows 的内置命令 netsh ,并结合正则表达式对输出进行解析。以下是主要的代码实现:

python 复制代码
import subprocess
import re

def decode_mixed_encoding(byte_data):
    # 尝试用UTF-8解码SSID部分(匹配"SSID X : "之后的内容)
    decoded = byte_data.decode('gbk', errors='replace')  # 先整体用GBK解码
    
    # 修正SSID部分(正则匹配SSID行)
    ssid_pattern = re.compile(r'(SSID \d+ : )(.+)')
    
    def fix_ssid(match):
        prefix = match.group(1)  # 保留"SSID X : "部分
        ssid_bytes = match.group(2).encode('gbk', errors='replace')  # 将乱码还原回字节
        try:
            fixed_ssid = ssid_bytes.decode('utf-8')  # 尝试UTF-8解码
        except:
            fixed_ssid = match.group(2)  # 解码失败则保留原样
        return prefix + fixed_ssid
    
    return ssid_pattern.sub(fix_ssid, decoded)

def scan_wifi_windows():
    try:
        raw_output = subprocess.check_output(
            ["netsh", "wlan", "show", "network", "mode=Bssid"]
        )
        print(decode_mixed_encoding(raw_output))
    except subprocess.CalledProcessError as e:
        print("Error:", e)

scan_wifi_windows()

代码解析

1. 导入库

首先,我们导入了 subprocessre 库。 subprocess 库用于执行外部命令,而 re 库用于正则表达式匹配。

python 复制代码
import subprocess
import re

2. 解码混合编码

decode_mixed_encoding 函数的主要作用是解码从 netsh 命令获取的字节数据。由于命令输出可能包含多种编码格式,因此我们首先使用 GBK 解码。

python 复制代码
def decode_mixed_encoding(byte_data):
    decoded = byte_data.decode('gbk', errors='replace')

接着,我们通过正则表达式匹配以" SSID X : "开头的行。对于匹配到的 SSID 部分,我们尝试将其从 GBK 编码转换回字节,随后再尝试用 UTF-8 解码。

python 复制代码
    ssid_pattern = re.compile(r'(SSID \d+ : )(.+)')
    
    def fix_ssid(match):
        prefix = match.group(1)  # 保留"SSID X : "部分
        ssid_bytes = match.group(2).encode('gbk', errors='replace')
        try:
            fixed_ssid = ssid_bytes.decode('utf-8')
        except:
            fixed_ssid = match.group(2)  # 解码失败则保留原样
        return prefix + fixed_ssid

最后,使用 ssid_pattern.sub(fix_ssid, decoded) 来替换 SSID 部分,返回最终的解码结果。

3. 扫描 Wi-Fi 网络

scan_wifi_windows 函数调用 netsh 命令并输出结果。如果命令执行失败,则捕获异常并打印错误信息。

python 复制代码
def scan_wifi_windows():
    try:
        raw_output = subprocess.check_output(
            ["netsh", "wlan", "show", "network", "mode=Bssid"]
        )
        print(decode_mixed_encoding(raw_output))
    except subprocess.CalledProcessError as e:
        print("Error:", e)

4. 运行函数

最后,我们调用 scan_wifi_windows() 函数,开始扫描 Wi-Fi 网络。

python 复制代码
scan_wifi_windows()
相关推荐
程序媛一枚~1 小时前
✨✨✨使用Python,OpenCV及图片拼接生成❤️LOVE❤️字样图,每张小图加随机颜色边框,大图加随机大小随机颜色边框
图像处理·python·opencv·numpy·图像拼接
MediaTea2 小时前
Python:collections.Counter 常用函数及应用
开发语言·python
如若1232 小时前
flash-attn 安装失败?从报错到成功的完整排雷指南(CUDA 12.8 + PyTorch 2.7)
人工智能·pytorch·python
007张三丰2 小时前
知乎高赞回答爬虫:从零开始,建立你的专属知识库
爬虫·python·知识库·python爬虫·知乎·高赞回答
网硕互联的小客服2 小时前
服务器防火墙是如何区分正常流量和攻击流量?
运维·服务器·网络
李昊哲小课2 小时前
Python json模块完整教程
开发语言·python·json
易醒是好梦2 小时前
Python flask demo
开发语言·python·flask
怪侠_岭南一只猿2 小时前
爬虫工程师入门阶段一:基础知识点完全学习文档
css·爬虫·python·学习·html
易龙祥2 小时前
批量下载IGS气象文件(利用python爬虫下载igs的气象数据)
python·igs·气象文件
阿_旭2 小时前
基于YOLO26深度学习的交警手势识别系统【python源码+Pyqt5界面+数据集+训练代码】
人工智能·python·深度学习·交警手势识别