当前位置: 首页 > news >正文

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

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

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

这是我当前电脑的 wifi 连接界面。
在这里插入图片描述
这个是运行的效果图:
在这里插入图片描述

代码实现

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

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 库用于正则表达式匹配。

import subprocess
import re

2. 解码混合编码

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

def decode_mixed_encoding(byte_data):
    decoded = byte_data.decode('gbk', errors='replace')

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

    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 命令并输出结果。如果命令执行失败,则捕获异常并打印错误信息。

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 网络。

scan_wifi_windows()
http://www.dtcms.com/a/126450.html

相关文章:

  • 【Qt】qDebug() << “中文测试“; 乱码问题
  • 论文阅读:2024-arxiv How to Steer LLM Latents for Hallucination Detection?
  • 多坐标系变换全解析:从相机到WGS-84的空间坐标系详解
  • 【Vue】案例——To do list:
  • JS 面向对象编程
  • AI智能体开发与大语言模型的本地化部署、优化技术
  • 【SQL】MySql常见的性能优化方式
  • Devops之GitOps:什么是Gitops,以及它有什么优势
  • 《Vue3学习手记》
  • 小刚说C语言刷题——第21讲 一维数组
  • Streamlit在测试领域中的应用:构建自动化测试报告生成器
  • 算法驱动的场景识别:规则引擎与机器学习的强大结合
  • P8739 [蓝桥杯 2020 国 C] 重复字符串
  • Java习题:合并两个有序数组
  • 蔚来汽车智能座舱接入通义大模型,并使用通义灵码全面提效
  • 巧记英语四级单词 Unit3-下【晓艳老师版】
  • HCIP-17 BGP基础2
  • 一文介绍阿里32B推理模型
  • 【软件测试】人工智能增强Web 自动化测试框架方案
  • C++ 入门四:类与对象 —— 面向对象编程的核心基石
  • 使用Mybatis时在XML中SQL高亮显示的方法
  • CExercise_10_2动态内存分配_1从键盘输入输入中读取一个整数n,动态分配一个长度为n的整型数组。
  • gcd之和
  • OpenCV 伪彩色处理
  • Linux 系统管理常用命令
  • RV1126 实现简单的UI方案
  • 【C++进阶】关联容器:multiset类型
  • Python代码解释
  • OpenCV 图形API(26)图像滤波-----方框滤波函数boxFilter()
  • SpringBoot系列之集成Redisson实现布隆过滤器