首先,感谢zest在这期间给予的帮助,要是没有他,这个linux上网的问题肯定解决不了。
现在切入正题,我们这儿使用的联创的web认证,认证页面index.jsp无法下载下来,也就不能用whz81兄提供的上网方法了。
我们这儿上网通过了两次dhcp,一次是机器启动时分得的192.168.4.*的局域网ip,然后通过web认证,可获取有效上网ip,认证结束后弹出的aps.exe常驻右下角系统栏负责计时和想网关发送keep-alive包
首先在windows正常上网,用ethereal 抓取上网认证的数据包和keep alive包(此过程不要开其他任何能发送网络数据包的程序),经过zest分析,keep alive包的内容为本机ip+16进制MAC地址,且客户端每30秒向网关发送一次
zest原文如下:
UDP 协议的包
特征如下:
* client 每 30 秒钟与 server 通讯一次
* server ip: 219.219.36.1 port: 8002
* client 发送的包中,data 为 10 byte,内容是 你的ip + 你的mac. 16进制
* server 收到后,给你发送 data 同样内容的包。
于是,我们可以用python脚本自己构造一个keep alive包发送程序,每30秒发送一次keep alive包
原脚本由zest收集,本人根据情况稍作修改,代码如下:
#! /usr/bin/env python
#
# Filename: send.py
"""
client
It sends out an UDP packet every 30 seconds
Please adjust the constant parameters as needed
"""
from socket import socket, AF_INET, SOCK_DGRAM,inet_aton
from time import time, ctime, sleep
print "\n##############################################################################\n"
print " linux客户端 CUMT 公网版\n"
print "程序环境Python\n 下载地址:ftp://202.119.199.88/incoming/soft\n说明:\n 本客户端包含两个文件send.sh和 send.py,使用时请直接执行send.sh,\n把ip地址的最后一个字段输入,回车即可\n 使用前请把send.py中的MAC地址改成你自己的网卡的MAC地址"
print "##############################################################################\n"
myip=raw_input("请输入你的ip地址218.3.194.")
myip='218.3.194.'+myip
print "\n你的ip",myip
SERVERIP = '218.3.194.1'
HBPORT = 8002
BEATWAIT = 30
msg=inet_aton(myip)+'\x00\xe0\x4d\x00\x33\xe5' #加号后的单引号内的内容为网卡MAC地址
print ""
#print "client sending to IP %s , port %d" % \
# (SERVERIP, HBPORT)
print "\n***客户端运行中 ,按 Ctrl-C 终止,***\n***你现在可以上网了***\n"
while 1:
hbsocket = socket(AF_INET, SOCK_DGRAM)
hbsocket.sendto(msg, (SERVERIP, HBPORT))
if __debug__:
print "Time: %s" % ctime(time())
sleep(BEATWAIT)
另外附send.sh
#!/bin/bash
echo
dhclient eth0
echo
echo " 以上bound to 后的ip地址为你所获得的ip地址,请在下面相应位置填入相应数值"
./send.py
注意,send.py和send.sh要放在同一目录下
1、使用前,请先安装python,下载地址:http://www.python.org/download/,
也可到ftp://202.119.199.88/incoming/soft/homenet下载2.3版的
2、在使用前,请把send.py中的网卡MAC地址部分改成你自己的网卡MAC地址,格式不变
3、如果你是使用多网卡,请把send.sh中的eth0改为相应的连接internet的网卡设备名,相应的把send.py中的网卡MAC地址改成你连接internet的那块网卡的MAC地址
3、登陆web认证主页,按照windows下的情况正常登陆
4、当浏览器中出现“用户登陆中~”时,过3,4秒中后在终端下执行send.sh
按照相关提示完成操作即可。
5、若系统提示”没有权限“,请用命令"chmod +x 文件名"更改文件执行权限
6、若一次登陆不成功,请先用CTRL+C终止客户端程序,用命令dhclient eth0重新获取局域网ip,再从头开始登陆web认证主页重新登陆
至此,成功登陆网络
此程序由两大缺点,一是不能让程序自动获取ip,二是不能让程序自动获取网卡mac地址,若是能将此两项解决,应该是比较完美了 |