用python3写一个华工SCUT连接的脚本

首先,这篇不完全原创,是参照崔庆才的博客中的一片文章《自己动手实现山东大学QLSC_STU无线网络掉线后自动重连》:http://cuiqingcai.com/2083.html

这里推荐一下崔庆才的个人博客:http://cuiqingcai.com/  非常不错能够学到很多东西。

看完,这篇博客之后,我发现我学校的无线网也是类似的,结合之前看过崔大大的爬虫练习一下,发现学校的SCUT可以更加简单。

1.首先,连接scut之后,打开登录认证界面,可以看到要输入账号和密码(统一认证的那个账号密码),然后用chrome的开发者工具点开network那个,用来捕捉网络请求响应




2.之后,点击登录之后,点击header,观察得到我们需要的数据------表单数据,主要查看Form Data中的内容


3.然后知道我们需要post_data的数据内容有哪些了

(post的data列表如下)

  1. Form Data:
    wlanuserip:172.27.194.70
    wlanacname:AC-master
    chal_id:
    chal_vector:
    auth_type:PAP
    seq_id:
    req_id:
    wlanacIp:192.168.104.252
    ssid:scut
    vlan:
    mac:
    message:
    bank_acct:
    isCookies:
    listpasscode:0
    listgetpass:1
    getpasstype:0
    randstr:9191
    domain:
    version:0
    authkey:123456
    isRadiusProxy:false
    usertype:
    url:
    isHaveNotice:0
    times:0
    weizhi:0
    smsid:0
    act:
    freeuser:
    freepasswd:
    logintype:0
    templatetype:1
    tname:0
    terminalType:
    is189:0
    viewusertime:1
    group_id:
    portaltype:
    portalpageid:
    viewlogin:1
    listfreeauth:0
    checkterminal:true
    userid:xxx
    passwd: xxxxxxx
其中最重要的几个数据需要我们自己去填写,wlanuserip无线上网的ipv4的地址,这个时候这个无线网分配的,userid登录的用户名,passwd登录的密码(想不到华工登录的密码竟然没有进行什么加密,感觉很容易被盗)


简单分析之后,代码的结构跟崔大大的写的是差不多的,主要注意python3中urllib是将python2中urllib和urllib2合并到一起,和一些字符串和字节的关系即可。(header信息中还有一个refer信息不可缺失,否则会被认为非法接入)


现在,直接贴上我的代码,关于各部分,有相应解释,结推荐的博客,应该很容易看懂。


#coding:utf-8
#将其修改成适应python3.X编译
import urllib#python3中已经将urllib和urllib2合并在一起了
#import urllib2
from urllib import parse,request
import socket
import types
import time
import re
import os
import subprocess

class SCUTWIFI:
	def __init__(self):
		#自己填写自己的账号和密码
		self.userid = 'xxxxxx'
		self.passwd = 'xxxxxx'
		#华工无线网的网段,不知道不同的区会不会不一样,还是全校都是这样
		self.ip_pre = '172.27'
		
	def login(self):
		#这里先判断,连接上SCUT之后,能不能上网(因为一天只要登录过一次,就够,应该是这样)
		isconnect = self.isConnect()
		if not isconnect:
			print ('Scut可以上网了!不需要去认证登录!')
		else:
			print('发现scut还暂时不能上网...')
			print ('正在认证华工无线网.....')
			wlanuserip = self.getIP()
			print ('无线上网的地址%s'%str(wlanuserip))
			data={
				'wlanuserip':wlanuserip,
				'wlanacname':'AC-master',
				'chal_id':'',
				'chal_vector':'',
				'auth_type':'PAP',
				'seq_id':'',
				'req_id':'',
				'wlanacIp':'192.168.104.252',
				'ssid':'scut',
				'vlan':'',
				'mac':'',
				'message':'',
				'bank_acct':'',
				'isCookies':'',
				'listpasscode':'0',
				'listgetpass':'1',
				'getpasstype':'0',
				'randstr':'5254',
				'domain':'',
				'version':'0',
				'authkey':'123456',
				'isRadiusProxy':'false',
				'usertype':'',
				'url':'',
				'isHaveNotice':'0',
				'times':'0',
				'weizhi':'0',
				'smsid':'0',
				'act':'',
				'freeuser':'',
				'freepasswd':'',
				'logintype':'0',
				'templatetype':'1',
				'tname':'0',
				'terminalType':'',
				'is189':'0',
				'viewusertime':'1',
				'group_id':'',
				'portaltype':'',
				'portalpageid':'',
				'viewlogin':'1',
				'listfreeauth':'0',
				'checkterminal':'true',
				'userid':self.userid,
				'passwd':self.passwd
			}
			#消息头
			headers={
				'User-Agent':'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/45.0.2454.101 Safari/537.36',
				'Host':'202.38.193.207',
				'Origin':'http://202.38.193.207',
				'Referer':'http://202.38.193.207/portalReceiveAction.do?wlanacname=AC-master&wlanuserip=172.27.194.70&wlanacname=AC-master&ssid=scut'
			}
			#1
			post_data = parse.urlencode(data).encode()
			login_url = 'http://202.38.193.207/portalAuthAction.do'
			req = request.Request(login_url,post_data,headers)
			respon = request.urlopen(req)
			content = respon.read().decode('gbk')
			self.getResultLogin(content)
		
	
	def getResultLogin(self,content):
		if u'上网期间请不要关闭此窗口' in content:
			print ('登陆成功!')
		else:
			print ('登陆失败!'	)
		
	#获取本机无线上网的IP
	def getIP(self):
		local_iP = socket.gethostbyname(socket.gethostname())
		if self.ip_pre in str(local_iP):
			return str(local_iP)
		ip_lists = socket.gethostbyname_ex(socket.gethostname())

		for ip_list in ip_lists:
			if isinstance(ip_list, list):
				for i in ip_list:
					if self.ip_pre in str(i):
						return str(i)
			elif isinstance(ip_list,str):
				if self.ip_pre in ip_list:
					return ip_list


	def isConnect(self):
		#判断是不是已经连接上SCUT
		denull = open(os.devnull,'w')
		result = subprocess.call('ping www.baidu.com',shell=True,stdout=denull,stderr=denull)
		#关闭设备
		denull.close()
		#0代表着连接上网络,1代表没有连接上
		return result
		
	def main(self):
		print ('欢迎使用LEE的Wlan简易登录系统')
		#self.userid = input('请输入账号:')
		#self.passwd = input('请输入密码:')
		#self.login()
		while True:
			#通过是否分配上网的IP地址判断是否连接上SCUT,如果没有会print出127.0.0.1
			nowIP = self.getIP()
			print (nowIP)
			if not nowIP:
				print ('还未连接scut!')
			else :
				print ('已连接scut')
				self.login()
				return False#登陆上就退出程序
				

ScutLogin = SCUTWIFI()
ScutLogin.main()


最后,博主第一次写博客,不太会写,代码也是写的不是很好,希望大家能给建议,一起学习进步,(希望不喜勿喷!!!)



  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值