Python跨平台识别周围WiFi的代码实现与技巧分享

 更新时间:2026年01月26日 08:18:54   作者:detayun  
在物联网设备管理、网络安全审计或智能家居场景中,识别周围WiFi网络是基础需求,Python凭借其丰富的生态库,能够跨平台实现WiFi扫描、信号强度检测及网络分析,本文将系统梳理主流方法,帮助开发者快速构建可靠的WiFi识别工具,需要的朋友可以参考下

在物联网设备管理、网络安全审计或智能家居场景中,识别周围WiFi网络是基础需求。Python凭借其丰富的生态库,能够跨平台实现WiFi扫描、信号强度检测及网络分析。本文将系统梳理主流方法,结合代码示例与性能对比,帮助开发者快速构建可靠的WiFi识别工具。

一、跨平台基础方案:subprocess调用系统命令

1. Windows系统:netsh命令

Windows原生提供netsh命令集,通过subprocess模块调用可获取详细WiFi信息:

import subprocess

def get_windows_wifi():
    # 列出所有可见网络
    cmd = 'netsh wlan show networks mode=bssid'
    output = subprocess.check_output(cmd, shell=True, encoding='gbk', errors='ignore')
    
    # 解析SSID与信号强度(示例简化版)
    networks = []
    for line in output.split('\n'):
        if 'SSID' in line:
            ssid = line.split(':')[1].strip()
        elif 'Signal' in line:
            signal = line.split(':')[1].strip()
            networks.append((ssid, signal))
    return networks

print(get_windows_wifi())

输出示例
[('HomeWiFi', '85%'), ('Office_5G', '72%')]

关键点

  • 需管理员权限执行完整扫描
  • 使用mode=bssid显示BSSID(MAC地址)
  • 信号强度为百分比格式,需转换为dBm(需额外解析)

2. Linux系统:nmcli/iwlist

Linux推荐使用NetworkManagernmcli工具(需安装):

def get_linux_wifi():
    cmd = 'nmcli -t -f SSID,SIGNAL dev wifi list'
    output = subprocess.check_output(cmd, shell=True, encoding='utf-8')
    return [line.split(':') for line in output.strip().split('\n')]

print(get_linux_wifi())

输出示例
[['HomeWiFi', '85'], ['Office_5G', '72']]

备选方案

  • 传统工具iwlistsubprocess.check_output(['iwlist', 'wlan0', 'scan'])
  • 需处理更复杂的输出格式(包含加密类型、信道等)

3. macOS系统:airport命令

macOS隐藏的airport工具位于私有框架中:

def get_macos_wifi():
    cmd = '/System/Library/PrivateFrameworks/Apple80211.framework/Versions/Current/Resources/airport -s'
    output = subprocess.check_output(cmd, shell=True, encoding='utf-8')
    return [line.split()[0:3] for line in output.strip().split('\n')[1:]]

print(get_macos_wifi())

输出示例
[['HomeWiFi', '-65', 'WPA2(PSK)'], ['Office_5G', '-72', 'WPA2(PSK)']]

二、进阶方案:使用专用库

1. pywifi:跨平台抽象层

pywifi封装了不同系统的底层操作,提供统一API:

from pywifi import PyWiFi, const

def scan_with_pywifi():
    wifi = PyWiFi()
    iface = wifi.interfaces()[0]  # 获取第一个无线接口
    
    iface.scan()  # 触发扫描
    import time
    time.sleep(2)  # 等待扫描完成
    
    results = iface.scan_results()
    return [(r.ssid, r.signal, r.bssid) for r in results]

print(scan_with_pywifi())

输出示例
[('HomeWiFi', -65, '00:1A:2B:3C:4D:5E'), ('Office_5G', -72, '00:1A:2B:3C:4D:5F')]

优势

  • 支持连接管理、配置文件保存等高级功能
  • 信号强度为dBm单位,更精准
  • 跨平台兼容性最佳

2. Scapy:网络层深度分析

对于需要分析802.11帧的场景(如检测隐藏SSID),可使用Scapy

from scapy.all import *

def sniff_wifi_packets(interface='wlan0mon'):
    def packet_handler(pkt):
        if pkt.haslayer(Dot11):
            if pkt.type == 0 and pkt.subtype == 4:  # Probe Request
                print(f"Device {pkt.addr2} probing for {pkt.info.decode('utf-8', errors='ignore') if pkt.info else 'HIDDEN'}")
    
    sniff(iface=interface, prn=packet_handler, count=100)

# 需先切换网卡到监听模式(Linux):
# sudo airmon-ng start wlan0
sniff_wifi_packets()

典型输出

Device 00:1A:2B:3C:4D:5E probing for HomeWiFi
Device 00:1A:2B:3C:4D:5F probing for HIDDEN

三、性能对比与选型建议

方案扫描速度精度跨平台依赖项适用场景
subprocess+netsh中等中等仅Windows快速原型开发
pywifi需安装库生产环境应用
Scapy极高需监听模式安全研究、协议分析

推荐组合

  • 通用场景:pywifi(开发效率与功能平衡)
  • 轻量级需求:系统命令+正则解析(减少依赖)
  • 深度分析:Scapy(需配合监听模式网卡)

四、常见问题解决

权限不足

  • Linux/macOS:使用sudo或配置sudoers免密码
  • Windows:以管理员身份运行脚本

无扫描结果

  • 检查无线网卡是否启用:ifconfig wlan0 up(Linux)
  • 确认未连接VPN或虚拟网卡干扰

跨平台兼容代码

import platform

def get_wifi_networks():
    system = platform.system()
    if system == 'Windows':
        return get_windows_wifi()
    elif system == 'Linux':
        return get_linux_wifi()
    elif system == 'Darwin':
        return get_macos_wifi()
    else:
        raise NotImplementedError(f"Unsupported OS: {system}")

五、扩展应用

信号强度热力图
结合folium库将扫描结果可视化:

import folium

def plot_wifi_heatmap(results):
    m = folium.Map(location=[39.9042, 116.4074])  # 北京坐标示例
    for ssid, signal, (lat, lon) in results:  # 假设已有坐标数据
        folium.CircleMarker(
            location=[lat, lon],
            radius=abs(signal)/10,
            color='red',
            popup=f"{ssid}: {signal}dBm"
        ).add_to(m)
    m.save('wifi_heatmap.html')

自动连接最强信号

def connect_strongest(ssid, password):
    from pywifi import Profile
    profile = Profile()
    profile.ssid = ssid
    profile.key = password
    # 配置加密方式(需根据实际情况调整)
    profile.akm.append(const.AKM_TYPE_WPA2PSK)
    profile.cipher = const.CIPHER_TYPE_CCMP
    
    wifi = PyWiFi()
    iface = wifi.interfaces()[0]
    iface.remove_all_network_profiles()
    iface.add_network_profile(profile)
    iface.connect()

结语

Python通过系统命令调用或专用库,能够高效实现跨平台WiFi识别。对于简单需求,subprocess方案足够轻量;若需生产级稳定性,pywifi是更优选择;而Scapy则适合网络协议层面的深度分析。开发者可根据实际场景灵活组合这些技术,构建从基础扫描到智能连接的完整解决方案。

以上就是Python跨平台识别周围WiFi的代码实现与技巧分享的详细内容,更多关于Python跨平台WiFi识别的资料请关注脚本之家其它相关文章!

相关文章

  • 使用Python分析wireshark文件

    使用Python分析wireshark文件

    这篇文章主要为大家详细介绍了如何使用Python实现分析wireshark文件,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下
    2024-11-11
  • 使用Python实现自动化整理文件的详细教程

    使用Python实现自动化整理文件的详细教程

    在日常工作中,我们经常需要处理大量的文件,手动完成这些任务不仅耗时,而且容易出错,所以下面小编就来和大家详细讲讲如何使用Python实现自动化整理文件吧
    2025-08-08
  • python中黄金分割法实现方法

    python中黄金分割法实现方法

    这篇文章主要介绍了python中黄金分割法实现方法,涉及Python数学计算的相关技巧,需要的朋友可以参考下
    2015-05-05
  • pygame实现键盘的连续监控

    pygame实现键盘的连续监控

    这篇文章主要为大家详细介绍了pygame实现键盘的连续监控,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-04-04
  • python3结合openpyxl库实现excel操作的实例代码

    python3结合openpyxl库实现excel操作的实例代码

    这篇文章主要介绍了python3结合openpyxl库实现excel操作的实例代码,非常不错,具有一定的参考借鉴价值,需要的朋友可以参考下
    2018-09-09
  • python中如何使用insert函数

    python中如何使用insert函数

    这篇文章主要介绍了python中如何使用insert函数,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-01-01
  • 使用Python进行数独求解详解(一)

    使用Python进行数独求解详解(一)

    本文主要介绍了如何构建一个Python脚本来解决数独难题,本文的重点在于介绍用于构建数独求解器的回溯算法。感兴趣的小伙伴可以学习一下
    2022-02-02
  • Python3运算符常见用法分析

    Python3运算符常见用法分析

    这篇文章主要介绍了Python3运算符常见用法,结合实例形式分析了Python3算术运算符、逻辑运算符、比较运算符、位运算符等相关原理与操作技巧,需要的朋友可以参考下
    2020-02-02
  • Python函数的参数列表解析

    Python函数的参数列表解析

    这篇文章主要介绍了Python函数的参数列表,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-12-12
  • 开始着手第一个Django项目

    开始着手第一个Django项目

    这篇文章主要介绍了开始着手第一个Django项目的过程,Django是丰富多彩的Python框架中人气最高的一个,功能多而全,需要的朋友可以参考下
    2015-07-07

最新评论