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

来源:互联网 发布:淘宝女装服装店铺简介 编辑:程序博客网 时间:2024/06/06 21:44

首先,这篇不完全原创,是参照崔庆才的博客中的一片文章《自己动手实现山东大学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 urllib2from urllib import parse,requestimport socketimport typesimport timeimport reimport osimport subprocessclass 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'}#1post_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 ('登陆失败!')#获取本机无线上网的IPdef 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_listdef isConnect(self):#判断是不是已经连接上SCUTdenull = open(os.devnull,'w')result = subprocess.call('ping www.baidu.com',shell=True,stdout=denull,stderr=denull)#关闭设备denull.close()#0代表着连接上网络,1代表没有连接上return resultdef main(self):print ('欢迎使用LEE的Wlan简易登录系统')#self.userid = input('请输入账号:')#self.passwd = input('请输入密码:')#self.login()while True:#通过是否分配上网的IP地址判断是否连接上SCUT,如果没有会print出127.0.0.1nowIP = self.getIP()print (nowIP)if not nowIP:print ('还未连接scut!')else :print ('已连接scut')self.login()return False#登陆上就退出程序ScutLogin = SCUTWIFI()ScutLogin.main()


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



0 0