公司上网需要登陆账号,当有两台机子和一个账号时,切换登陆不太方便。本文实现局域网远程模拟登陆上网。
问题描述
公司每人只有一个账号,而且需要通过浏览器登陆连接,但我有两台在同一局域网的主机,要实现在一台主机(下文统称为客户机)能远程(不需要跑到另一主机面前)使另一台主机(下文统称为服务器)上网.
工具和环境
工具:chrome 浏览器,python2.7.
系统:两台主机都是Ubuntu14.04.
上网登陆地址:http://192.168.0.2/。
具体过程
1、在客户机上实现模拟登陆
①:首先在chrome登陆http://192.168.0.2/,并且通过按F12进入developer Tools→Network和勾选Preserve log,记录整个登陆过程。我们发现有两个POST(不懂自己查一下get和post的作用),其请求的地址分别为:
http://192.168.0.2/login/servlet/PreLog;adt_myuid=0;jsessionid=1234;
http://192.168.0.2/login/servlet/LoginServlet;adt_myuid=0;jsessionid=1234;
而且通过多次登陆,发现只有“1234”这个位置有变化。那这个东西是怎么来的了?
通过查看http://192.168.0.2/网页的源码,发现在该源码中能找到它,在Network中发现它是cookie。
②:通过上面过程,因此有了基本的实现过程:通过cookielib获得cookie,然后post两次就可以登陆,其中post最重要的是你要在Network中找到FromData,然后记录里面的数据(有username和password)。
具体代码如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
| import requests import urllib2 import cookielib import getpass import re username = raw_input("Enter your username: ") password = getpass.getpass('Enter your password: ') url_login = 'http://192.168.0.2/' cj = cookielib.CookieJar() opener = urllib2.build_opener(urllib2.HTTPCookieProcessor(cj)) urllib2.install_opener(opener) resp = urllib2.urlopen(url_login) for index, cookie in enumerate(cj): jsessionid = str(cookie) jsessionid = re.findall('=(.*?) ', jsessionid)[0] url_post1 = 'http://192.168.0.2/login/servlet/PreLog;adt_myuid=0;jsessionid=' + jsessionid header = { 'User-Agent': 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/47.0.2526.73 Chrome/47.0.2526.73 Safari/537.36'} form_data = {'lan': 1, 'username': username, 'password': password, 'scheme': 'http', 'twice': 1, 'authType': 0 } s = requests.session() response = s.post(url_post1, data=form_data, headers=header) print (response.text) url_post2 = 'http://192.168.0.2/login/servlet/LoginServlet;adt_myuid=0;jsessionid=' + jsessionid form_data1 = { 'lan': 1, 'username': username, 'password': password, 'url': 'http://192.168.0.2/login/index_.jsp;adt_myuid=0;jsessionid=?orginUrl=http://192.168.0.2/', 'scheme': 'http', 'ifPl': 'undefined', 'authType': 0, 'machCode': '', 'ifRadomcode': 'undefined', 'radomcode': 'undefined'} s1 = requests.session() response1 = s1.post(url_post2, data=form_data1, headers=header) print (response1.text)
|
将上述代码保存为load-net.py
2、在客户机远程登陆服务器。
①:ssh远程登陆 :ssh 192.168.0.96(这是服务器在局域网中的IP)
②:使用scp将load-net.py到服务器上。
③:运行