很麻烦…… 晕,那网吧用户怎么办??中国电信不至于没头脑干这种让社会倒退的事吧??
不至于所有的网吧以后都用光纤接入吧?启用WEB认证是为了防止私人用户共用,但是电信有这个必要么?你加装了路由器,难道电信那里会不知道?ADSL改认证是不会的,Lan方式倒是绝对可能的,因为那个实现起来太容易了,大家都知道少花钱,中国电信也一样,如果改造ADSL的认证,估计还不如不开通它划算。 其实,大家有没有想过,为什么我们机器的信息(私隐)会泄漏出去给人家知道呢? UP 用2K单网卡就可以了,前提是ADSL插交换机上,还有,这样共亨速度没路由快。 我也来说两句,虽然我是刚接触软件路由器,但本人将几款软件路由都试装过了,的确不错.说到WEB认证.我家里是长宽(我最恨的宽带就是它了,跟前面的网友,有同一感受,长宽服务极差,一旦用户认证之后,你的网速度就受到限制).本人家里有三台机器.同时还将隔壁邻居的一台电脑也连在这根宽带上.我用ROUTEROS做了一台路由器,剩余的其中一台机器进入系统进入认证系统.然后剩下的两台机器就可以上网了,虽然这样做很浪费,但至少能学习LINUX系统..增加些知识.只不过,如此做,一定要设置一下限速.否则的话,其中的一台机器不停的下载MP3的话,其他机器就根本不能上网了,本人如此做法,的确是极不合算.请大家不要笑话,我的目的是为了学习几款不错的软件路由. linux做到这一点似乎不是什么难事。我的想法是模拟WEB提交,熟悉http的朋友应该能明白我说的意思。可惜我这里没有那种环境。 我觉得这篇文章很好http://www.linuxsir.org/bbs/showthread.php...threadid=160764
QUOTE
长城宽带认证方法 ====================================下面是auth.py,认证主程序,程序是用python写的,参考了论坛里的精华帖子,在这里表示感谢///////////auth.py/////////////#! /usr/bin/env pythonimport osimport reimport httplib, urllibtemp = 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=xxxxxxxxxidpasswd = ff.readline()ff.closem = 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.closer1 = 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='+PORTff.write(HOST)ff.flush()ff.close ////把认证服务器的地址和端口写入临时文件中给后面的logout使用cmd = 'POST '+pathheader =' 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+':'+PORTlength = 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 socketsock = 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+headersock.send(cmd) ////发送认证成功确认包s = sock.recv(8192) sock.closeparams = 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.closeos.system('/etc/rc.d/init.d/UDP.py') ////运行keep-alive程序os._exit(0) ////退出认证程序
QUOTE
keep-alive程序(UDP.py) ///////////UDP.py///////////#! /usr/bin/env python## Filename UDP.pyimport ospid=os.fork() ////获取自己的pid并创建一个守护进程 if pid:ff = open('/var/tmp/authpid.conf','w+',-1)ff.write(str(pid)) ////写入进程pid ff.flush()ff.closeprint 'pid='+str(pid)os._exit(0) ////关闭自身进程 from socket import socket,AF_INET,SOCK_DGRAMff = open('/var/tmp/auth.conf','r',-1) ////读取keep-alive参数 bufread=ff.readline()ff.closeimport rer1 = re.compile(r'.*sid=(\d{8,10})&srvip=(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})&sport=(\d{2,5}).*interval=(\d{1,2})',re.MULTILINE)m = r1.search(bufread)print 'Start to Send UDP package'SID=m.group(1)HOST=m.group(2)PORT=int(m.group(3))interval=int(m.group(4))import signaldef onSignal(signum, stackframe):if signum==signal.SIGALRM:s = socket(AF_INET,SOCK_DGRAM)s.sendto(SID,(HOST,PORT)) ////如果收到alarm信号则发送keep-alive包(udp包,只是简单的一个SID) s.closeif signum==9:os._exit(0) ////如果收到信号9就退出 while 1:signal.signal(signal.SIGALRM, onSignal)signal.alarm(interval) ////定时发出alarm信号 signal.pause() ////休眠
QUOTE
logout程序(logout.py) ///////logout.py////////#! /usr/bin/env pythonimport reff = open('/var/tmp/server.conf','r',-1)HOST = ff.readline()ff.closem = re.search("server=(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})port=(\d{2,5})",HOST)SERVER = m.group(1)PORT = m.group(2) ////读取服务器地址和端口 ff = open('/var/tmp/auth.conf','r',-1)params=ff.readline()ff.closepath = '/cgi-bin/timer'cmd = 'POST '+pathheader =' 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+':'+PORTlength = len(params)control = '\x0d\x0a'+'Content-Length: '+str(length)+'\x0d\x0a'+'Cache-Control: no-cache'+'\x0d\x0a'+'Cookie: sid=20040706210751'+'\x0d\x0a\x0d\x0a' ////构造logout包 import socketsock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)sock.connect((SERVER,int(PORT)))sock.send(cmd+header+control+params) ////发送logout命令 import osff = open('/var/tmp/authpid.conf','r',-1)pid = ff.readline()cmd='kill -9 '+pidos.system(cmd) ////杀掉keep-alive进程 print 'logout ok' 8 错。。。。不过这里的 keep-alive 。。。。为什么会需要这个? m0n0wall提供web认证功能的,大家可以用它搭建一个环境做测试。 目前常用的以太网认证技术有PPPOE,WEB.VLAN,802.1X, 其中,PPPOE,802.1X的BAS必须在L2使用,WEB,VLAN可以使用L3,目前L3交换机的性价比很高,上了L3的都想启用802.1X,VLAN,WEB认证方式,以充分利用L3的功能,但VLAN认证受VLAN数限制,不能大规模应用,802.1X和WEB认证很理想,但也有一个致命的缺点,就是网内如果有两个DHCP,会造成客户端的分配到错误的IP造成不能上网,而DHCP服务器架设太简单,WIN2K,XP自带,连最便宜的路由器也有DHCP功能,所以运营商有可能试用一下这两种认证方式,不可能长久的采用这种认证技术。PPPOE则可避免这种现象,虽然他在存在一个VLAN内有两个PPPOE服务器会造成不能正常上网的缺点,但PPPOE服务器的架设要比DHCP麻烦一些。所以,目前,PPPOE认证还是运营商最佳选择。
当然,802。1X,WEB可以不采用DHCP而直接指定IP,但额外增加的工作量太多,也不太适合运营商 最简单的方式
由于现在的web认证只要求输入用户名和密码[还没有BT的让你输入验证码]
所以自己编写个html 利用JS表单自动提交
自动往web认证服务器上post数据就可以了
然后开机自动运行此html就好了