请高手帮忙看下一个python的问题

软件和网站开发以及相关技术探讨
回复
头像
alan110_38
帖子: 172
注册时间: 2008-02-06 13:30
来自: 浙江嘉兴

请高手帮忙看下一个python的问题

#1

帖子 alan110_38 » 2008-03-02 20:58

用任意一个支持 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的运行,请问怎么才可以?

本人菜鸟 不知道怎么使用写出来的东西,也不知道怎么写

请高手帮忙,谢谢先
回复