python: 连接校园网

校园网断连

    在图书馆网还好,回到宿舍,校园网动不动就断,就想能不能写个工具,隔一段时间检查网络是否连接,没有的话就自动连接

校园网

    看了别人的博客,发现并不难实现,主要就是需要获取消息头headers和请求信息post data(用google浏览器按F12就可以找到)
    https://blog.csdn.net/hty46565/article/details/72822447

    所以自己上手了

from pywifi import PyWiFi,const,Profile
import time
import pywifi
import urllib
import urllib.request
import requests
import os
from  bs4 import BeautifulSoup
import http.cookiejar


username = 'xxx'
password  = 'xxx'
url = 'xxxx'


def SignOn():
    try:
        headers={
     
          'Accept':'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3',
          'Accept-Encoding': 'gzip, deflate',
          'Accept-Language': 'zh-CN,zh;q=0.9',
          'Origin': 'http://xxxx',
          'Cache-Control': 'max-age=0',
          'Content-Length': '162',
          'Host': 'xxx',
          'Referer':'xxxxx',
          'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.140 Safari/537.36 Edge/17.17134',
          'Content-Type': 'application/x-www-form-urlencoded',
          'Upgrade-Insecure-Requests': '1',
          'Cookie': 'xxxx',
          'Connection': 'keep-alive',
        }

        data = {
          
          'usernameHidden': username,
          'username':username,
          'pwd':password,
         }

        z = requests.post(url,data=data,headers=headers)
        s = z.text.encode('utf-8').decode('utf-8')
   
        soup = BeautifulSoup(s, 'html.parser')    
        msg = soup.find_all('title')[0]
        if msg.get_text()=='登录成功':        
    	    print("连接校园网成功!") 
        else:        
    	    print("连接校园网失败!")
    except:
        print("连接出现故障!")

    结果一直运行失败…

    所以就用fiddler抓包来看

    fiddler设置好后,浏览器搜索网页的时候就数据包会被拦截

    python可以通过以下方法实现fiddler对其拦截

proxies = {
     
        "http": "http://127.0.0.1:8888",
        "https": "http://127.0.0.1:8888",}

z = requests.post(url,data=data,headers=headers,proxies=proxies)

    结果发现
    1.COOKIE有一个JSESSIONID每次都会变,其实就是一个会话,所以先请求一次获取JSESSIONID

     s = requests.Session()
     r = s.get(url)
     jid = r.cookies.values()[0]

    2.两个POST 里的访问地址不一样
    这才是导致失败最大的问题
    误以为是连接校园网时弹出的窗口的网址

    把url改完后就成功啦!!!

    附上搜索附近WIFI和连接WIFI(适用于无密码或像校园网一样在弹出页面登录)的代码

def scanWifi():
	wifi=pywifi.PyWiFi()
	iface=wifi.interfaces()[0]
	iface.scan()
	time.sleep(1)
	bsses=iface.scan_results()
	for bss in bsses:
		print("{},信号:{}".format(bss.ssid,bss.signal))

def connectWifi(wifiName):
    wifi = pywifi.PyWiFi()  # 创建一个wifi对象
    ifaces = wifi.interfaces()[0]  # 取第一个无限网卡
    ifaces.disconnect()  # 断开网卡连接
    time.sleep(1)

    profile = pywifi.Profile()  # 配置文件
    profile.ssid = wifiName  # wifi名称

    ifaces.remove_all_network_profiles()  # 删除其他配置文件
    tmp_profile = ifaces.add_network_profile(profile)  # 加载配置文件
    ifaces.connect(tmp_profile)  # 连接

    也可以做个简单的界面

import _tkinter
import tkinter


myGUI=tkinter.Tk(className='校园网自动登录')
sw = myGUI.winfo_screenwidth()#得到电脑屏幕宽度
sh = myGUI.winfo_screenheight()#得到电脑屏幕高度
ww = 300#窗口宽度
wh = 180#窗口高度
x = (sw-ww) / 2
y = (sh-wh) / 2
myGUI.geometry("%dx%d+%d+%d" %(ww,wh,x,y))#居中显示

label_Name=tkinter.Label(myGUI,text="账号").grid(row=3,column=3,padx=15,pady=10)

label_Pwd=tkinter.Label(myGUI,text="密码").grid(row=4,column=3,padx=15,pady=10)

Name=tkinter.Entry(width=30)
Name.insert(0,"xxxx")#默认账号
Name.grid(row=3,column=4)

Pwd=tkinter.Entry(width=30,show = '*')
Pwd.insert(0,'123456')#默认密码
Pwd.grid(row=4,column=4)

logIN=tkinter.Button(myGUI,text='Connect',width=30).grid(row=5,column=4)
tkinter.mainloop()

python: 连接校园网_第1张图片

你可能感兴趣的:(Python,python)