用任意一个支持 http 协议的语言或工具,编写向认证服务器 POST 认证页面中 form 的程式即可,甚至读取认证页面都无需。我用 curl 和 python 各做了一个。假如您略微了解 http 协议,只要找到认证页面中向服务器 POST 用户名、密码等数据的 form,然后转换为您采用语言的语法格式就能够了,根本无需分析认证页面中繁杂的 Javascripts。对计时窗发出的 keep-alive 包也采用同样的方法。
例子:
* 认证页面中的 form
<form id="mainform" name="mainform" method="post"
action="http://61.61.61.61:80/secu/webLogin.jsp"> <input
type="hidden" name="connectname" value=""> <input value="-1"
name="connecttype" type="hidden"> <input value="0" name="consumeright"
type="hidden"> <input value="0" name="separatecard" type="hidden"> <input
value="192.168.000.000" name="localip" type="hidden"> <input value="0"
name="IsIndex" type="hidden"> 用户名:<input name="username"> 密 码:<input
name="password" type="password"> <input name="lianjiewangluo"
type="submit"> </form>
* 用 curl 写的一个脚本:
#!/bin/bash
/etc/init.d/myiptables start
dhcpcd eth1
MYIP=`ifconfig eth1|grep inet|sed 's/^ *//'|sed 's/ /:/g'|cut -f3 -d:`
echo $MYIP
UN=88888888
SERVER=61.61.61.61
curl --trace trace.txt -A 'Mozilla' -d "username=$UN&password=8888&localip=$MYIP&connectname=&connecttype=-1" http://$SERVER/secu/webLogin.jsp
说明:curl 是个用 url 语法传输文档的命令行程式,支持 http,ftp 等协议,类似 wget。
上例中,curl 的命令行参数 -A 指明客户端的类型,这是服务器为了安全,需要指明。Mozilla 或 IE 都能够,我更愿意用 Mozilla。 -d 是必需的,表示用 POST 方法。-d 后的内容就是用户名、密码 IP 地址等信息,根据您的认证页面中 form 的 input 项目填写,内容和其保持一致,参数间用 & 分开。后面是认证页面的地址。执行这个脚本后,返回 200 OK,表示认证成功,否则,仔细检查 -d 后的参数是否正常,地址是否正确。
* 用 python 写的认证程式:
#!/usr/bin/env python
import httplib, urllib
params = urllib.urlencode({'connectname': '',
'connecttype': -1,
'consumeright': 0,
'separatecard': 0,
'localip': '192.168.000.000',
'IsIndex': 0,
'username': 88888888,
'password': 8888})
headers = {'Accept': 'text/html', 'User-Agent': 'Mozilla',
'Content-Type': 'application/x-www-form-urlencoded'}
server = '61.61.61.61'
path = '/secu/webLogin.jsp'
conn = httplib.HTTPConnection(server)
conn.request("POST", path, params, headers)
r1 = conn.getresponse()
print r1.status, r1.reason
data1 = r1.read()
print data1
conn.close()
产生 keep-alive 包的程式
#!/usr/bin/env python
import httplib
def testHttplib(server, path):
req = httplib.HTTP(server)
req.putrequest('GET', path)
req.putheader('Accept', 'text/html')
req.putheader('User-Agent', 'Mozilla')
req.endheaders()
ec, em, h = req.getreply()
fd = req.getfile()
return fd.read(), (ec, em)
myip = '192.168.000.000'
server = '61.61.61.61'
path = '/ClientProcess.jsp?MsgType=1&ISNNO=1001&LocalIP=' + myip
# print 'testing "%s%s"' % (server, path)
dataHttplib, result = testHttplib(server, path)
# print "data length (httplib):", len(dataHttplib), result
# print dataHttplib
说明:
python 是个功能强大的脚本语言,和 Perl 类似。正如您看到的,他和 curl 完成同样的工作,但更优雅。这里要注意别漏掉'User-Agent' 和 'Content-Type' 内容,我在这个上面浪费了不少时间。其他和 curl 的说明相同。
最后,将下面内容加到 crontab 中,确保每 5 分钟向 ISP 发送一个 keep-alive 包,模拟计时窗功能。
*/5 * * * * /home/zest/keepalive.py
想实现keepalive.py的运行,请问怎么才可以?
本人菜鸟 不知道怎么使用写出来的东西,也不知道怎么写
请高手帮忙,谢谢先
请高手帮忙看下一个python的问题
- alan110_38
- 帖子: 172
- 注册时间: 2008-02-06 13:30
- 来自: 浙江嘉兴