宿舍自从换了校园网的认证系统就不再用客户端了,只能在网页登录。每次上网都要打开浏览器的话很不方便,而且我有时在ubuntu控制台上想联网但终端文本浏览器似乎不支持页面跳转,既然如此,何不写个客户端呢?经过了解发现学校的认证系统简直弱爆了。根本不需要做什么破解工作,宿舍用的深澜,明文传输密码,一抓包一览无余,听说锐捷还好一些,密码经过加密但是用的像base64等算法,也很容易被人获取密码。学校的大量资金都不知道去哪了。。。
下面是用python3写的简单的POST,没有对cookie的处理,注意python2需要略做修改,区别是urllib,urllib2等有了变动。
#!/usr/bin/env python3 # coding=utf-8 #login to school network #if add parameter,will logout import sys #for sys.argv import urllib import urllib.request import urllib.parse url = 'http://xxx' def login(): action = 'login' username = 'xxx' #可将密码等保存至文件 password = 'xxx' ac_id = 6 type = 1 data = {'action': action, 'username': username, 'password': password, 'ac_id': ac_id, 'type':type } postdata=urllib.parse.urlencode(data).encode('utf-8') try: request=urllib.request.Request(url, postdata) response=urllib.request.urlopen(request) if(response.read().decode('utf-8').find('login_ok')>0): print('login_ok') except Exception as e: print('oops!Please check network!') print(e) def logout(): logoutdata = {'action': 'logout'} postdata=urllib.parse.urlencode(logoutdata).encode('utf-8') request=urllib.request.Request(url, postdata) response=urllib.request.urlopen(request) print(response.read().decode('utf-8')) #根据情况解码 if __name__ == '__main__': if len(sys.argv) == 1: login() else: logout()
python的语法什么的就是简洁,包含的功能也多,社区有许多人的无私奉献。缺点也是有的,比如说没有编译型语言的强大的语法分析,执行速度。写这段代码时某行因为少加了一个右括号,提示的是该行的下一行有语法错误,并未提示缺少右括号,很不人性啊,或许加上分号会好一点吧。
从上面的代码中也可以感觉到python对于网络,正则表达式等强大的支持,元组,字典等数据类型也很好用。
使用方法:linux下很容易,$python3 net.py 再跟任意参数可注销登录,chmod +x net.py后就可以$./net.py,或加上做个符号链接,放在桌面。
win下:可在python环境中运行,也可用Py2exe等工具做成可执行文件。有趣的是win下Python为提高运行效率,生成了.pyc类似编译的文件。