吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 3236|回复: 43
收起左侧

[Python 原创] 监测网络状态并自动重连WIFI

  [复制链接]
bilibini 发表于 2023-11-22 20:23
本帖最后由 bilibini 于 2023-11-22 20:24 编辑

起因
因为自己经常上班摸鱼,远程玩自己家中的电脑
但由于网络波动等未知原因,有时候远程连接可能会下线(因为电脑没有插网线连的WiFi,很容易出问题
因此些了个检测网络状态的程序,网络有问题,重新连接WiFi(根据信号依次连接配置好的WiFi)
代码写都写好了,也不能光自己用,本着学习分享的想法,就分享出来吧(也不是多复杂的代码,感兴趣的朋友看看


功能
一个可以持续检测网络并自动连接到WIFI的小工具。
在使用之前,请将“config.json”文件中的WiFi信息更改为您想要连接的WiFi信息。
日志文件保存在“/log”文件夹中。


代码
mian.py
[Python] 纯文本查看 复制代码
import os
import json
import requests
import pywifi
import time

errNum=0
iface = pywifi.PyWiFi().interfaces()[0]# 获取第一个无线网卡
def outprint(text:str)->str:
    '''打印并保存日志'''
    fliePath=os.path.join(os.getcwd(),'log')
    if not os.path.exists(fliePath):os.mkdir(fliePath)
    logFile=os.path.join(fliePath,f'{time.strftime("%Y-%m-%d",time.localtime())}.txt')
    text=f'[{time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())}]{text}'
    with open(logFile,'at') as f:
        f.writelines('\n'+text)
    print(text)
    return text

def getNet()->bool:
    '''获取网络状态'''
    global errNum
    try:
        response=requests.get('http://httpdns.alicdn.com/multi_httpdns_resolve?host_key=baidu.com')
        json.loads(response.text)['ttl']
        outprint(f'网络状态正常')
        return True
    except:
        outprint(f'网络状态异常:{errNum}')
        return False

def getWifiConfigList()->list:
    '''获取wifi列表'''
    global iface
    wifilists=[]
    ssidList=[]
    signalList=[]
    wifilist=[]
    configList=[]
    iface.scan()#扫描WiFi
    results = iface.scan_results()# 获取扫描结果
    for result in results:
        if result.ssid=='':
            continue
        try:
            signal_num=ssidList.index(result.ssid)
            if signalList[signal_num]>result.signal:
                ssidList[signal_num]=result.ssid
                signalList[signal_num]=result.signal
            else:
                continue
        except:
            ssidList.append(result.ssid)
            signalList.append(result.signal)
    for i in range(len(ssidList)):
        wifia={
            "ssid":ssidList[i],
            "signal":signalList[i]
        }
        wifilist.append(wifia)
    wifilist=sorted(wifilist,key=lambda x:-x['signal'])
    configFile=os.path.join(os.getcwd(),'config.json')
    with open(configFile,'r') as f:
        configList=json.loads(f.read())

    for wifia in wifilist:
        ssid=wifia["ssid"]
        for wifib in configList:
            if ssid==wifib['ssid']:
                wifilists.append(wifib)
    outprint(f'获取wifi列表,数量{len(wifilists)}个')
    return wifilists

def conWifi(wifiConfig:dict)->bool:
    '''链接wifi'''
    global iface
    profile = pywifi.Profile()
    profile.ssid = wifiConfig['ssid']
    profile.auth = pywifi.const.AUTH_ALG_OPEN
    profile.akm.append(pywifi.const.AKM_TYPE_WPA2PSK)
    profile.cipher = pywifi.const.CIPHER_TYPE_CCMP
    profile.key = wifiConfig['password']
    iface.disconnect()# 断开当前连接的无线网络
    # iface.remove_all_network_profiles()#删除所有连接过的wifi文件
    tmp_profile = iface.add_network_profile(profile)#添加wifi文件
    iface.connect(tmp_profile)# 连接wifi
    time.sleep(8)
    if iface.status() != pywifi.const.IFACE_CONNECTED:
        outprint(f'wifi连接失败,wifi:{wifiConfig}')
        return False
    else:
        return getNet()


while True:
    if errNum>=50:
        break
    if getNet():
        time.sleep(30*60)
    else:
        wifiList=getWifiConfigList()
        if len(wifiList)==0:time.sleep(8);wifiList=getWifiConfigList()
        for wifiConfig in wifiList:
            if conWifi(wifiConfig):
                break
            errNum+=1
            time.sleep(8)


config.json
[JavaScript] 纯文本查看 复制代码
[
    {
        "ssid":"ChinaNet-3UzB-5G",
        "password":"12345678"
    },
    {
        "ssid":"XG-OFFICE-AP02",
        "password":"12345678"
    }
]



360截图20231122200214623.png


免费评分

参与人数 5吾爱币 +9 热心值 +5 收起 理由
萌新表示是小白 + 1 用心讨论,共获提升!
苏紫方璇 + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
Ming2022 + 1 + 1 我很赞同!
max2012 + 1 + 1 我很赞同!
bucaiGitHub + 1 我很赞同!

查看全部评分

本帖被以下淘专辑推荐:

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

nis415 发表于 2023-11-23 08:46
B占上有人用pywifi模块做了个暴力破解wifi密码的,但是人家这个标题起的!
https://www.bilibili.com/video/BV1Sw411C7xk/

免费评分

参与人数 1热心值 +1 收起 理由
goblack + 1 卖课自媒体既视感

查看全部评分

lechao 发表于 2023-11-22 20:51
GR021 发表于 2023-11-22 20:57
yslifan 发表于 2023-11-22 20:57
感谢分享  谢谢
POjie5011jm 发表于 2023-11-22 21:09
刚好最近也在玩远程控制电脑,抄楼主的代码试试效果
ImYoubaba 发表于 2023-11-22 21:40
没wifi怎么办?
ckm97 发表于 2023-11-22 22:13
bucuo,试一下
rpwarmhj 发表于 2023-11-22 23:46
感谢分享
zklv5a 发表于 2023-11-23 00:54
支持支持
gxhc168 发表于 2023-11-23 07:06
感谢楼主的分享
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 18:59

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表