该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
原文在我的博客 http://blog.zhenlanbing.com/archives/211
很长时间以来在Linux环境下编程,使用Virtual Box安装CentOS,用NAT网络和端口转发,再使用Putty连接localhost进行编程。但最近我需要在其他教室连接到虚拟机,用Windows远程桌面是一个解决方案。但是只有Windows系统可用,如果我想上课时用手机连就没戏了,所以我开始使用桥接。
桥接的问题是联网。
学校校园网不是免费的,是要登陆才能用。有两种登陆方式,一是Windows客户端,二是网页登陆。不用想,肯定是二。
但我的CentOS系统没有图形界面,所以只能考虑使用脚本模拟用户登录。
首先我们学校校园网认证的网址是http://172.16.8.3,使用火狐浏览器打开,按F12打开开发者工具,点击网络。然后输入用户名,密码登陆,然后就哭了,跳到学校主页去了。我们没有看到想象中的POST请求,而是一个GET请求,说明网页被重定向了。
我开始诅咒火狐不能查看历史请求,但我又想到了另一个方案,我输入错误的密码,这样试一下。果然,火狐显示了POST请求,请求内容如下:
Host: 172.16.8.3
User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; rv:33.0) Gecko/20100101 Firefox/33.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: mn,zh-cn;q=0.8,zh;q=0.6,en-us;q=0.4,en;q=0.2
Accept-Encoding: gzip, deflate
Referer: http://172.16.8.3/
Connection: keep-alive
Content-Type: application/x-www-form-urlencoded
Content-Length: 52
DDDDD=4406290&upass=111111&0MKKey=%B5%C7%C2%BC+Login
HTTP头并不重要,重要的是POST部分,也就是:
DDDDD=4406290&upass=111111&0MKKey=%B5%C7%C2%BC+Login
DDDDD是用户名,upass是密码,后面MKKey这个参数应该是对登陆的说明,乱码的原因是学校使用GBK编码,而火狐用的是UTF-8,这不重要,原样发过去就可以了。那么Python代码就很好写了:
import urllib.request
postdata = “DDDDD=这里换成你的账号&upass=这里换成你的密码&0MKKey=%B5%C7%C2%BC+Login”
postdata = postdata.encode(‘utf-8′)
fp = urllib.request.urlopen(“http://172.16.8.3“, postdata)
mybytes = fp.read()
print(mybytes)
注销校园网的简单的多了,只要GET请求http://172.16.8.3/F.html:
import urllib.request
fp = urllib.request.urlopen(“http://172.16.8.3/F.html“)
mybytes = fp.read()
print(mybytes)
当然,我没有解析HTML而是直接将HTML打印了出来,对于没有学过网页开发的同学就是噩梦,但我建议你登陆、注销后可以通过ping来确定是否已经登录/注销,比如
ping http://www.baidu.com
至此,我的虚拟机可以连接到互联网了。