用python获取可用wifi信息(windows版)

本文介绍如何使用Python编写脚本来自动检测并切换到可用的Wi-Fi网络,通过os模块模拟系统命令,包括查看当前WiFi、测试ping通性,当网络不稳定时,实现无线网络的智能切换,提升游戏和在线体验。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

最近在打游戏的时候经常会遇到断网的情况,每次都需要切出去切换wifi,很烦人,所以就写了个用Python自动切换可用的wifi来减少困扰。

几个系统命令
这次我们是使用python中的os模块来模拟命令行来执行命令切换wifi,所以在写程序之前,可以先了解一下几个命令。

查看当前wifi:netsh wlan show interfaces
查看所有wifi:netsh wlan show profiles
连接wifi:netsh wlan connect name=“wifi名称”

思路

这次我们写的程序的主要思路如下:

1.获取当前wifi
2.测试当前wifi能否ping通百度
3.如果能ping通则等待5s后继续测试
4.如果ping不通则在能够连接的wifi中随机选择一个来连接

代码

获取当前wifi

import os
import subprocess

def get_current_wifi():
    cmd = 'netsh wlan show interfaces'
    p = subprocess.Popen(cmd,
                        stdin=subprocess.PIPE,
                        stdout=subprocess.PIPE,
                        stderr=subprocess.PIPE,
                        shell=True)
    ret = p.stdout.read()
    index = ret.find("SSID")
    if index > 0:
        return ret[index:].split(':')[1].split('\r\n')[0].strip()
    else:
        return None

这里我们使用subprocess.Popen函数来模拟执行命令行命令,并通过read()方法得到命令行的结果,接着对结果进行分析可以得到当前的wifi。

测试能否ping通

def check_ping(ip, count=1, timeout=1000):
    cmd = 'ping -n %d -w %d %s > NUL' % (count, timeout, ip)
    res = os.system(cmd)
    return 'ok' if res == 0 else 'failed'

这里我们首先构建了一个cmd命令来ping我们自己传递过来的ip地址,然后使用os.system()函数执行该命令,如果返回值为0则ping通,否则失败。

自动切换wifi

import random

def auto_switch_wifi(wifiList):
    wifi = random.choice(wifiList)
    cmd = 'netsh wlan connect name={}".format(wifi)
    res = os.system(cmd)
    return 'ok' if res == 0 else 'failed'

在auto_switch_wifi()函数中,我们接收一个可用的wifi列表,然后再列表中随机选择一个wifi进行切换,如果成功则返回ok。

到这里我们的几大基本模块已经写完了,下面上完整代码。

# _*_ coding:utf-8 _*_
import os
import time
import subprocess
import random


def check_ping(ip, count=1, timeout=1000):
    cmd = 'ping -n %d -w %d %s > NUL' % (count, timeout, ip)
    # 通过os.system()方法执行命令
    response = os.system(cmd)
    return 'ok' if response == 0 else 'failed'


def get_current_wifi():
    cmd = 'netsh wlan show interfaces'
    p = subprocess.Popen(cmd,
                         stdin=subprocess.PIPE,
                         stdout=subprocess.PIPE,
                         stderr=subprocess.PIPE,
                         shell=True)
    ret = p.stdout.read()
    index = ret.find('SSID')
    if index > 0:
        return ret[index:].split(':')[1].split('\r\n')[0].strip()


def auto_switch_wifi(wifiList):
    wifi = random.choice(wifiList)
    cmd = 'netsh wlan connect name="%s"' % wifi
    res = os.system(cmd)
    return 'ok' if res == 0 else 'failed'



def main():
    # 百度ip
    ipTest = '61.135.169.121'
    # 可以切换的wifi
    wifiList = ['HUAWEI-5DD8']
    while True:
        current_wifi = get_current_wifi()
        print "当前的wifi为:", current_wifi
        if check_ping(ipTest, 2) != 'ok':
            print "联网失败,正在切换wifi"
            if auto_switch_wifi(wifiList) == 'ok':
                print "切换成功"
                print "-" * 40
            else:
                continue
            time.sleep(5)
        else:
            print "可以成功联网"
            print '-' * 40
            time.sleep(5)


if __name__ == "__main__":
    main()

补充

使用python的subprocess模块来查看所有WIFI

示例代码

import subprocess

result = subprocess.check_output(['netsh', 'wlan', 'show', 'network'])
result = result.decode('gbk')
lst = result.split('\r\n')
lst = lst[4:]

for index in range(len(lst)):
    if index % 5 == 0:
        print(lst[index])

程序输出结果

SSID 1 : song189
SSID 2 : CMCC-iGKK
SSID 3 : CMCC-Mshj
SSID 4 :
SSID 5 : Gtspc2018
SSID 6 : CU_S36b
SSID 7 : bear&fish
SSID 8 : ziroom1102
SSID 9 : Xiaomi_238A绯栫硸
SSID 10 : xiangyu2102

check_output 方法会在子进程中执行netsh wlan show network 命令,其结果将以字符串的形式返回,类型为bytes,使用decode方法将数据转成str,这里要注意编码,我电脑里执行代码时用的是gbk,如果你实验时在这里报错,可以改成ascii或者utf-8试试。

也可用代替:

def execute_cmd(cmd):
    result = subprocess.check_output(cmd)
    result = result.decode('utf-8')
    return result


result = execute_cmd("netsh wlan show network")

参考:https://zhuanlan.zhihu.com/p/93835847
https://blog.csdn.net/qq_34377830/article/details/82497457

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值