|
|
====================================
下面是auth.py,认证主程序,程序是用python写的,参考了论坛里的精华帖子,在这里表示感谢
///////////auth.py/////////////
#! /usr/bin/env python
import os
import re
import httplib, urllib
temp = os.popen('ifconfig eth0 | awk \'/inet/{print $2}\' | awk -F: \'{print $2}\'') ////获取自己的ip地址
IP = temp.read()
err = temp.close()
m = re.search("(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{2,3})", IP)
MYIP = m.group(1) ////获取自己的ip地址的标准格式
ff = open('/etc/auth.conf','r',-1) ////在/etc/auth.conf里放自己的密码和id.格式为myid=xxxxxxxxxxxxmypasswd=xxxxxxxxx
idpasswd = ff.readline()
ff.close
m = re.search("myid=(\d{12})mypasswd=(.*)$",idpasswd)
MYID = m.group(1)
MYPASSWD = m.group(2)
path = '/cgi-bin/authcgi_login' ////构造http请求,获得认证界面
conn = httplib.HTTPConnection('vip.163.com')
conn.request('GET','','')
r = conn.getresponse()
body = r.read()
conn.close
r1 = re.compile(r'.*http://(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}) \d{2,5})/cgi-bin/authcgi_login',re.MULTILINE)
m = r1.search(body) ////获取认证服务器的地址和端口
SERVER=m.group(1)
PORT=m.group(2)
params = urllib.urlencode([
('sip',SERVER),
('uip',MYIP),
('url','vip.163.com'),
('uact','login'),
('uact_status',1),
('uid',MYID),
('upwd',MYPASSWD),
('vpn','0'),
('go','用户登入'),
('btype','0')
])
ff = open('/var/tmp/server.conf','w+',-1)
HOST = 'server='+SERVER+'port='+PORT
ff.write(HOST)
ff.flush()
ff.close ////把认证服务器的地址和端口写入临时文件中给后面的logout使用
cmd = 'POST '+path
header =' HTTP/1.1'+'\x0d\x0a'+'Accept: *.*'+'\x0d\x0a'+'Content-Type: application/x-www-form-urlencoded'+'\x0d\x0a'+'User-Agent: Microsoft Internet Explorer 6.0'+'\x0d\x0a'+'HOST:'+SERVER+':'+PORT
length = len(params)
control = '\x0d\x0a'+'Content-Length: '+str(length)+'\x0d\x0a'+'Cache-Control: no-cache'+'\x0d\x0a'+'Cookie: sid=20040706210751'+'\x0d\x0a\x0d\x0a'
import socket
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect((SERVER,int(PORT)))
sock.send(cmd+header+control+params) ////登录认证
s = sock.recv(8192)
r1 = re.compile(r'.*srvip=(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})&sport=(\d{2,5})&sid=(\d{8,10})&stime=(\d{9,11})&rmtime=(.?\d{1,2})&interval=(\d{1,2}).*chkey=(\d{14})',re.MULTILINE)
m = r1.search(s)
SERVER = m.group(1)
PORT = m.group(2) ////获得keep-alive服务器的地址和端口
ff = open('/var/tmp/auth.conf','w+',-1)
ff.write(params)
ff.flush()
ff.close ////keep-alive服务器的地址和端口写入零时文件中给keep-alive程序使用
SID = m.group(3)
STIME = m.group(4)
RMTIME = m.group(5)
INTERVAL = m.group(6)
CHKEY = m.group(7)
params = urllib.urlencode([
('uid',MYID),
('uip',MYIP),
('srvip',SERVER),
('sport',PORT),
('sid',SID),
('stime',STIME),
('rmtime',RMTIME),
('interval',INTERVAL),
('btype','0'),
('vpn','0'),
('wtype','0'),
('chkey',CHKEY),
])
header =' HTTP/1.1'+'\x0d\x0a'+'Accept: *.*'+'\x0d\x0a'+'User-Agent: Microsoft Internet Explorer 6.0'+'\x0d\x0a'+'HOST:'+SERVER+':'+PORT+'\x0d\x0a'+'Cache-Control: no-cache'+'\x0d\x0a'+'Cookie: sid=20040706210751'+'\x0d\x0a\x0d\x0a'
path = '/cgi-bin/timer'
cmd='GET '+path+'?'+params+header
sock.send(cmd) ////发送认证成功确认包
s = sock.recv(8192)
sock.close
params = urllib.urlencode([
('uid',MYID),
('uip',MYIP),
('sid',SID),
('srvip',SERVER),
('sport',PORT),
('stime',STIME),
('rmtime',RMTIME),
('interval',INTERVAL),
('time_span','0'),
('act','logout')
])
ff = open('/var/tmp/auth.conf','w+',-1)
ff.write(params)
ff.flush()
ff.close ////把认证返回的keep-alive所需要的id,interval等写入零时文件
print 'Login OK'
sock.close
os.system('/etc/rc.d/init.d/UDP.py') ////运行keep-alive程序
os._exit(0) ////退出认证程序 |
|