Skip to content

Instantly share code, notes, and snippets.

@yanunon
Created February 25, 2012 05:56
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save yanunon/1906781 to your computer and use it in GitHub Desktop.
Save yanunon/1906781 to your computer and use it in GitHub Desktop.
Use this python script to login the campus network of BUPT
#!/usr/bin/env python
#-*- coding:utf-8 -*-
import urllib2
import urllib
import md5
import re
import time
import optparse
user = 'YOUR USERNAME'
passwd = 'YOUR PASSWORD'
user_agent = 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1017.2 Safari/535.19'
net_gateway = 'http://gw.bupt.edu.cn'
def get_passwd2(passwd):
m = md5.new()
m.update(passwd)
passwd2 = m.hexdigest()
passwd2 = passwd2[8:24]
return passwd2
def do_logout(user, passwd):
headers = {
'User-Agent' : user_agent,
}
data = 'username=' + user + '&password=' + passwd + '&drop=0&type=1&n=1'
logout_url = net_gateway + '/cgi-bin/force_logout'
logout_req = urllib2.Request(url=logout_url, data=data, headers=headers)
try:
logout_rsp = urllib2.urlopen(logout_req)
page = logout_rsp.read()
print page
except Exception, e:
raise e
def do_login(user, passwd):
headers = {
'User-Agent' : user_agent,
}
passwd2 = get_passwd2(passwd)
data = {
'username' : user,
'password' : passwd2,
'drop' : 0,
'type' : 1,
'n' : 100
}
data = urllib.urlencode(data)
login_url = net_gateway + '/cgi-bin/do_login'
login_req = urllib2.Request(url=login_url, data=data, headers=headers)
try:
login_rsp = urllib2.urlopen(login_req)
page = login_rsp.read()
#page == 'online_num_error'
return page
except Exception, e:
raise e
def test_network():
headers = {
'User-Agent' : user_agent,
}
req = urllib2.Request('http://www.douban.com', headers=headers)
rsp = urllib2.urlopen(req)
page = rsp.read()
rst = re.search('http://(\d{1,3}\.){3}\d{1,3}/muxjp\.php', page)
if rst is None:
return 'no need login'
else:
return 'need login'
def do_auth(user, passwd):
test = test_network()
if test == 'need login':
try_time = 0
msg = do_login(user, passwd)
while msg == 'online_num_error' and try_time < 10:
try_time += 1
do_logout(user, passwd)
print 'try logout times:%d' % try_time
time.sleep(3)
msg = do_login(user, passwd)
print msg
else:
print test
if __name__ == '__main__':
parser = optparse.OptionParser()
parser.add_option('-t', type='string', dest='t', default='login', help='auth type, default is "login", you can use "logout"')
(options, args) = parser.parse_args()
if options.t == 'login':
do_auth(user, passwd)
elif options.t == 'logout':
do_logout(user, passwd)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment