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

作者:

文章目录
  • 方案 扫描速度 精度 跨平台 依赖项 适用场景 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自动连接已保存WiFi的实现方案 Python使用pywifi模块实现轻松查看WIFI密码 Python制作一个WiFi密码测试工具 python写的本地WIFI密码查看器的具体代码 利用python pywifi实现破解WiFi密码
  • 目录
    • 一、跨平台基础方案:subprocess调用系统命令
      • 1. Windows系统:netsh命令
      • 2. Linux系统:nmcli/iwlist
      • 3. macOS系统:airport命令
    • 二、进阶方案:使用专用库
      • 1. pywifi:跨平台抽象层
      • 2. Scapy:网络层深度分析
    • 三、性能对比与选型建议
      • 四、常见问题解决
        • 五、扩展应用
          • 结语

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

            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(需额外解析)

            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'])
            • 需处理更复杂的输出格式(包含加密类型、信道等)

            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)']]

            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单位,更精准
            • 跨平台兼容性最佳

            对于需要分析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自动连接已保存WiFi的实现方案
            • Python使用pywifi模块实现轻松查看WIFI密码
            • Python制作一个WiFi密码测试工具
            • python写的本地WIFI密码查看器的具体代码
            • 利用python pywifi实现破解WiFi密码

            站内搜索