公司上网需要登陆账号,当有两台机子和一个账号时,切换登陆不太方便。本文实现局域网远程模拟登陆上网。

问题描述

公司每人只有一个账号,而且需要通过浏览器登陆连接,但我有两台在同一局域网的主机,要实现在一台主机(下文统称为客户机)能远程(不需要跑到另一主机面前)使另一台主机(下文统称为服务器)上网.

工具和环境

工具: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
# encoding=utf8
import requests
import urllib2
import cookielib
import getpass
import re
username = raw_input("Enter your username: ")
password = getpass.getpass('Enter your password: ')
# get the cookie,which is called jsessionid,<strong>这里的jsessionid就是上文说的1234</strong>
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]
# post website1,这里拼接真是的post地址
url_post1 = 'http://192.168.0.2/login/servlet/PreLog;adt_myuid=0;jsessionid=' + jsessionid
# 有些网站反爬虫,这里用headers把程序伪装成浏览器
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'}
# 登录需要提交的表单,这里就是上文说的<span style="font-size:18px;"><span style="font-size:18px;"><strong>FromData</strong></span></span>中的内容。
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)
# post website2
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到服务器上。
③:运行

1
python load-net.py