您现在的位置: Tracy‘Blog > 博客 > Python > 正文
突破Netkeeper之Tp-Link开wifi

直接上代码吧,代码还是别人的,也没怎么改,测试能用了,就贴上来。

主要是因为,貌似心跳包取消了。


#!/usr/bin/env python2
#encoding=utf-8
#该脚本请配合定时任务使用 建议的定时任务配置 见sx.conf
import time,hashlib,struct,sys,socket,urllib2,json
import os.path
from Crypto.Cipher import AES
from Crypto.Cipher import DES3
des=DES3.new('1234ZHEJIANGXINLIWANGLEI',2,'12345678')
aes=AES.new('xlzjhrprotocol3x',1)
g_u='' #闪讯帐号
g_p='' #闪讯密码
g_router_acc='admin' #路由的登陆用户名和密码
g_router_pw=''
g_router_url='''http://192.168.1.1/userRpm/PPPoECfgRpm.htm?
&wan=0&wantype=2&VnetPap=201&linktype=1&waittime=&Connect=%%C1%%AC+%%BD%%D3
&acc=%s&psw=%s'''.replace('\n','') #路由的拨号字串
def getPIN(): #对用户名的加密
    global g_u
    us=g_u
    RAD="cqxinliradius002"
    timeHash=[0,0,0,0]
    timeTemp=[0,0,0,0]
    temp=int(time.time())
    timedivbyfive=temp//5
    for i in range(0,4):
        for j in range(0,8):
            timeHash[i]=timeHash[i]+(((timedivbyfive>>(i+4*j))&1)<<(7-j))
    re_time=""
    m=hashlib.md5()
    bm=struct.pack('>I',timedivbyfive)+(us.split('@')[0]+RAD).encode('ascii')
    m.update(bm)
    pk=m.hexdigest()[0:2]
    PIN27=[0,0,0,0,0,0]
    PIN2=''
    PIN27[0]=((timeHash[0]>>2)&0x3F)
    PIN27[1]=((timeHash[0]&0x03)<<4&0xff)|((timeHash[1]>>4)&0x0F)
    PIN27[2]=((timeHash[1]&0x0F)<<2&0xff)|((timeHash[2]>>6)&0x03)
    PIN27[3]=timeHash[2]&0x3F
    PIN27[4]=((timeHash[3]>>2)&0x3F)
    PIN27[5]=((timeHash[3]&0x03)<<4&0xff)
    for i in range(6):
        PIN27[i]={True:(PIN27[i]+0x20)&0xff,False:(PIN27[i]+0x21)&0xff}[((PIN27[i]+0x20)&0xff)<0x40]

    for i in range(6):
            PIN2=PIN2+chr(PIN27[i])
    PIN=PIN2+pk+us #'\x0D\x0A'+

    print PIN
    return PIN

def Dail(): #路由拨号
    global g_router_url,g_router_acc,g_router_pw,g_p
    PIN='%0D%0A'+urllib2.quote(getPIN()) #编码
    auth='%s:%s'%(g_router_acc,g_router_pw)
    auth=auth.encode("base64")[0:-1]
    realurl=g_router_url%(PIN,g_p)
    print realurl
    req=urllib2.Request(url=realurl,headers={'Authorization':
         'Basic '+auth}) # 用户名和密码
    res=urllib2.urlopen(req,timeout=200) 
    res.close()

def getIP(): #获取外网ip
    try:
        res=urllib2.urlopen('http://whois.pconline.com.cn/ipJson.jsp',timeout=2000)
    except:
        return None
    if res.getcode()!=200:
        return None
    re=res.read().decode('gbk').encode('utf8')
    res.close()
    re=re[re.rfind('{'):re.find('}')+1]
    return json.loads(re)

def main(): #包括 显示ip 纯拨号 心跳 拨号并心跳
    arg=sys.argv
    with open('./sxlast.txt','w+') as file:
        file.write(time.strftime("%x %X"))
    if (len(arg)>1):
        if arg[1]=='i':
            ip=getIP()
            if ip:
                print(ip['ip'])
            else:
                print 'ip error'
        elif arg[1]=='d':
            Dail()
    else:
        if not getIP():
            Dail()
            time.sleep(50)

if __name__=='__main__':
    main()



可能并不是一次性就拨上了,多运行几次呗。把上面的保存为,dial.py。

然后

python dial.py d

就可以拨号了。效果如下:


就这么点了。

2014.11.12 16:51:22

发表评论(0)
姓名 *
电子邮件
QQ
评论内容 *
验证码 *图片看不清?点击重新得到验证码请输入图片后链接字符‘a’