python之简单POST模拟登录

宿舍自从换了校园网的认证系统就不再用客户端了,只能在网页登录。每次上网都要打开浏览器的话很不方便,而且我有时在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类似编译的文件。

你可能感兴趣的:(python)