本帖最后由 guazi111 于 2016-6-17 12:41 编辑
rt
发现使用urllib2模拟登录提交有时候提交成功但是没有生效,所以回头看了一下telnetlib的说明以及padavan的ss.sh脚本,又写了一个通过telnet更新的py脚本,具体看5楼
padavan的ss自动梯子还是不错的,设置成通过gfwlist区别流量,属于简便易行
ishadowsocks会免费共享ss服务器,但是每6个小时就会更新一次密码,全部手动的话实在太痛苦,所以花了些时间研究了一下python,写了这么个脚本,能够自动从iss获取最新的数据并提交到padavan,基于python2.7---没选择最新的python3的原因主要是俺还有一个刷了openwrt的硬改大亚sb120,想通过它来定期运行,那上面的python貌似木有3,所以就这样了
运行脚本的结果大约如下图:
脚本代码如下,29,35行的IP改成自己的路由器IP,根据三楼的提示添加本地base64编码,把22行的“admin:admin”按照用户名:密码的格式改一下就可以了
- #!/usr/bin/python
- # -*- coding: utf-8 -*-
- #by guazi111
- #---------------------------------import---------------------------------------
- import urllib2;
- import urllib;
- import re;
- import base64;
- #from BeautifulSoup import BeautifulSoup;
- #------------------------------------------------------------------------------
- def main():
- #-------这部分是从ishadowsocks获取最新的源码
- getSSUrl = "http://www.ishadowsocks.net/";
- req = urllib2.Request(getSSUrl);
- resp = urllib2.urlopen(req);
- respHtml = resp.read();
- #-----------在up后面写自己的用户名密码
- up = "admin:admin"
- routerauth = base64.b64encode(up);
-
- #----------这一部分是定义本地路由器的管理提交页面,登录信息等
- headers = {
- #host一栏是路由器IP
- "Host":"172.16.1.1",
- "User-Agent":"Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:47.0) Gecko/20100101 Firefox/47.0",
- #这里需要根据大家自己的用户名密码修改Basic后面那一串东西,用户名@密码然后base64编码一下就行了
- "Authorization":"Basic "+routerauth
- }
- #routerSSurl这里须要修改一下IP地址为具体的路由器IP
- routerSSurl = "http://172.16.1.1/start_apply.htm"
- ssreq = urllib2.Request(routerSSurl,headers = headers);
- ssreqp = urllib2.urlopen(ssreq);
- ssrespHtml = ssreqp.read();
- #print ssrespHtml
- resetSSurl = "http://172.16.1.1/apply.cgi"
- resetssreq = urllib2.Request(resetSSurl,headers = headers);
- resetssreqp = urllib2.urlopen(resetssreq);
- resetssrespHtml = resetssreqp.read();
- #-------------这一部分是从ishadowsocks的源码中获取3个ss服务器的最新地址,端口和密码----------------------
- #<h4>A服务器地址:XXXX</h4>
- foundAserv = re.search('<h4>A服务器地址:(?P<aserv>.+?)</h4>', respHtml);
- #print "foundApass=",foundApass;
- if(foundAserv):
- aserv = foundAserv.group("aserv");
- # print "A_Server:",aserv;
- #-
- foundAport = re.search('<h4>端口:(?P<aport>.+?)</h4>\n<h4>A密码', respHtml);
- if(foundAport):
- aport = foundAport.group("aport");
- #<h4>C密码:xxxxxxx</h4>
- foundApass = re.search('<h4>A密码:(?P<apass>.+?)</h4>', respHtml);
- #print "foundApass=",foundApass;
- if(foundApass):
- apass = foundApass.group("apass");
- print aserv+":"+aport+"'s Password:"+apass;
- else:
- apass = '';
- print aserv+":"+aport+"'s Password:none";
- #------------------------------------
- #<h4>B服务器地址:XXXX</h4>
- foundBserv = re.search('<h4>B服务器地址:(?P<bserv>.+?)</h4>', respHtml);
- if(foundBserv):
- bserv = foundBserv.group("bserv");
- # print "B_Server:",bserv;
- #<h4>B服务器地址:XXXXX</h4>
- # <h4>端口:8989</h4>
- foundBport = re.search('<h4>端口:(?P<bport>.+?)</h4>\n<h4>B密码', respHtml);
- if(foundBport):
- bport = foundBport.group("bport");
- else:
- bport = "none";
- # print "B_port:",bport;
-
- #<h4>B密码:xxxxxxx</h4>
- foundBpass = re.search('<h4>B密码:(?P<bpass>.+?)</h4>', respHtml);
- #
- if(foundBpass):
- bpass = foundBpass.group("bpass");
- print bserv+":"+bport+"'s Password:"+bpass;
- else:
- bpass = '';
- print bserv+":"+bport+"'s Password:none";
- #------------------------------------
- #
- #<h4>C服务器地址:XXXXX</h4>
- foundCserv = re.search('<h4>C服务器地址:(?P<cserv>.+?)</h4>', respHtml);
- #print "foundCpass=",foundCpass;
- if(foundCserv):
- cserv = foundCserv.group("cserv");
- # print "C_Server:",cserv;
- #-
- foundCport = re.search('<h4>端口:(?P<cport>.+?)</h4>\n<h4>C密码', respHtml);
- if(foundCport):
- cport = foundCport.group("cport");
- #<h4>C密码:xxxxxxx</h4>
- foundCpass = re.search('<h4>C密码:(?P<cpass>.+?)</h4>', respHtml);
- #print "foundCpass=",foundCpass;
- if(foundCpass):
- cpass = foundCpass.group("cpass");
- print cserv+":"+cport+"'s Password:"+cpass;
- else:
- cpass = '';
- print cserv+":"+cport+"'s Password:none";
- #-------------------------------------
- #-----------以下这部分是提交获取到的信息,俺这里是只把日本的服务器相关信息给更新上去了,即cserv,cport和cpass
- postData = {
- 'current_page':'/Advanced_Extensions_SS.asp',
- 'sid_list':'LANHostConfig;General;',
- 'action_mode': 'Apply',
- 'ss_enable':'1',
- 'ss_mode_x':'1',
- 'ss_server':cserv,
- 'ss_server_port':cport,
- 'ss_key':cpass,
- 'ss_method':'aes-256-cfb',
- 'ss_mode':'0',
- 'ss_programs_x':'3',
- 'ss_opt_x':'2'
- }
- resetsspostData = {
- 'action_mode':'button_script3'
- }
- #合成post数据
- data = urllib.urlencode(postData)
- print "data:###############"
- print data
- resetdata = urllib.urlencode(resetsspostData)
- print resetdata
- #创建request
- #构造request请求
- request = urllib2.Request(routerSSurl,data,headers)
- try:
- #访问页面
- response = urllib2.urlopen(request)
- #cur_url = response.geturl()
- #print "cur_url:",cur_url
- status = response.getcode()
- print status
- except urllib2.HTTPError, e:
- print e.code
- resetSSrequest = urllib2.Request(resetSSurl,resetdata,headers)
- try:
- #访问页面
- response = urllib2.urlopen(resetSSrequest)
- #cur_url = response.geturl()
- #print "cur_url:",cur_url
- status = response.getcode()
- print status
- except urllib2.HTTPError, e:
- print e.code
- ###############################################################################
- if __name__=="__main__":
- main();
复制代码
或者直接下载附件后解压运行也可以
|