位置: IT常识 - 正文

在Linux下通过WEB认证方式上网(linux web gui)

编辑:rootadmin
通过分析 windoze 下 Web 认证过程,提出在 Linux 中用脚本实现通过 Web 认证方式上网的方法... 16-07-31

推荐整理分享在Linux下通过WEB认证方式上网(linux web gui),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:linux webui,linux的web,linux的web,linux webget,linux webget,linux的web,linux webget,linux webdav,内容如对您有帮助,希望把文章链接给更多的朋友!

摘要

  通过分析 windoze 下 Web 认证过程,提出在 Linux 中用*脚本*实现通过 Web 认证方式上网的方法

问题由来

  近来,随着宽带入户,越来越多的 ISP 采用 Web 认证这种接入认证技术。Web 认证从用户的角度看,是指用户在浏览器中通过 Web 页面输入用户名和密码的认证过程。多数 ISP 号称无需客户端软件,实际情况却是:Windoze 下用户可以顺利通过 Web 认证上网,但 Linux 用户却没有这么幸运。

分析原因

  什么原因呢?解决问题还需从分析认证页面入手,下面的分析主要针对我这里的情况。在 Mozilla 中打开认证页面后,没有显示任何内容。仔细分析认证页面,发现认证页面采用 JavaScripts 编写,并且是针对 IE 编制的。IE 并未完全按照标准使用 JavaScripts。IE 对 JavaScripts 做了一些扩充,主要有以下几项:

  * .cab files for download of binaries;   * document.all;   * element.innerHTML;   ...

  详情请参阅 http://www.stopbadtherapy.com/standards.shtml

IE 对 JavaScripts 的这些扩充,Mozilla 是不支持的,实际上 Mozilla 对标准 JavaScripts 的支持比 IE 好。所以,这些有 IE 特点的认证页面 Mozilla 等浏览器自然无法通过了。 从用户浏览器的角度看,Web 认证除了通过 Web 页面输入用户名和密码外,还需要通过 http 协议传送客户由 DHCP 获得的 IP。有些 ISP 在用户登录到认证页面时,由浏览器自动下载 .cab 文件,然后执行该文件获得用户的 IP,再传给 Web Server。还有些 ISP 在用户通过认证后,会在客户端弹出一个计时窗,定时向 ISP 发送 keep-alive 包。当然,Web 认证是一个比较新的方式,还没有形成标准,所以各提供商的方法也不尽相同,所谓各村有各村的高招,你那里的方法就很有可能与我的不同,但道理应该是一样的。根据以上的分析,可以看出 Linux 用户自然不可能用非 IE 兼容的浏览器直接通过登录 Web 认证界面上网啦。

  解决方法

  好了,问题就在这些 Web 页面使用 IE 方言的 JavaScripts 上,有几种解决方法:

  1。使用 Linux 下 IE 兼容的浏览器,有吗?谁知道请告诉我。   2。使用 wine + IE 的方法,有成功的吗?大家共同分享。   3。如果将这些鸟语改为普通话,我们就可以用 Mozilla 等非 IE 浏览器通过 Web 认证方式上网了。   4。要求 ISP 提供支持 W3C 标准的认证页面。   5。分析 web 认证的原理,编写认证程序。

  最理想的方法四,可是我等不急,也不一定能等到,也许你比我幸运。我采取第三种方法,对于方法三,你一定会问:认证页面在 Web Server 上,我无权修改,行不通。确实如此,这里有个变通的办法:下载认证页面,按照 JavaScripts 标准修改并保存在本地,每次上网前用本地经过修改的 Web 认证页面而非 Web Server 的认证页面就可以了。具体修改方法,参照 http://www.stopbadtherapy.com/standards.shtml 中的对照表,找出认证页面使用 IE 方言的 JavaScritps,根据对照表提供的修改建议对你的认证页面作出相应修改。对于使用.cab 的认证页面,情况就比较复杂。需要分析这个.cab 在你的 JavaScripts 中的用法,判断它的功能,我这里是用它获得本地 IP。所以,我在本地执行脚本获得 IP 来模拟这个功能。似乎.cab 多与 IP 有关。

  一个例子

  * 以我这里为例,我的使用环境:

  ISP:铁通 ADSL

  认证方式:Web 认证

  ISP 的接入服务器:华为 Quidway MA5200E/F (具体型号不能完全确定)

  Linux:GENTOO 1.4 rc-3

  Browser: Mozilla 1.4a/Phoenix 0.5

  * 在 Linux 下用 mozilla (一定要用非 IE 浏览器获得认证页面,这话有点多余,但有的用户是在 Window$ 下调试的),访问 ISP 的 WEB 认证页面时,浏览器中没有显示任何内容,根本无法输入帐号和密码,更谈不上通过认证。这难不倒咱 linuxer, 查看认证页面(/index.jsp)源码,发现这两段 javascript:

代码如下:    id="PortalClient"     codebase=http://61.61.61.61:80/PortalAX.cab#version=1,0,1,8     ...     var clientIp = PortalClient.localIP;     var languagetype = 0;     if ((clientIp=="")  (clientIp==null)) {     window.parent.location.href="https://www.jb51.net/ipError.jsp";     } else {     window.parent.location.href="https://www.jb51.net/queryPort.jsp?ip="+clientIp+"newbl="+languagetype;     }

  可以看出它用 PortalClient 获得本地的 IP,如果成功,转到 http://你的WEB认证页面/queryPort.jsp?ip=你当前的IP 。而 Mozilla 不支持它获取 IP (PortalClient,是针对IE的,唉,这个程序编得太短视),看来问题出在这里。既然如此,我们可以手工加上自己的 IP(这个 IP 是与 ADSL 相联的网卡从 ISP 的 DHCP 服务器获得的地址)。在 Mozilla 地址栏中输入:

    http://61.61.61.61/queryPort.jsp?ip=192.168.0.2

    --------^^^^^^^^^^^------------------^^^^^^^^^^^

    --------你的ISP认证服务器 ------------- 你当前的IP

  嗒嗒,登录页面出来啦!

  赶快输入帐号,密码,按登录按钮(期待中。。。)。

   viva!!!

  ISP 的首页终于被揪出来啦,在终端中 ping www.gnu.org ,ping 通,没问题。

  * 至此,在 Linux 下 web 认证方式已经完成。方法很简单,每次上网时,在 mozilla 的地址栏中输入:

  http://你的ISP认证服务器地址/queryPort.jsp?ip=你当前的IP

  登录页面出来后,和 IE 中的操作过程完全一样。

    * 当然你可以把这些步骤写成一个脚本,以后简单执行脚本就可以了。

代码如下:    #!/bin/bash     dhcpcd eth1     phoenix http://61.61.61.61/queryPort.jsp?ip=`ifconfig eth1 grep inet sed 's/^ *//' sed 's/ /:/g' cut -f3 -d:` & 在Linux下通过WEB认证方式上网(linux web gui)

  说明:

  eth1 是与 ADSL 联的网卡名,根据你的实际情况填写。   61.61.61.61 是我这 ISP 的认证地址。   后面一段是获得 eth1 的 ip 地址。   注意!一定要用非 IE 浏览器获得调试认证页面,因为 IE 可以执行认证页面的 JavaScripts,有些认证过程实际上是执行多个页面完成的,IE 最后停留的页面不一定是起始的认证页面,你有可能漏掉前面的重要信息,我这里就是这种情况。

另外一种方法

  如果你对方法 3 不满意,可以用方法 5,继续分析 web 认证的原理,编写自己的认证程序。其实搞清原理后,实现的方法更简单,更灵活,而且在 ISP 要求客户端定时发送 keep-alive 包的情况下,也只能采取这种方法。我是这样做的:

  1。用网络分析软件(如:ethereal),抓取正常认证过程的通讯包;

  在 windoze 下,用 ethereal 抓包。注意抓包时,除了 IE 不要启动其它产生网络通讯的程序,以免产生干扰数据;保存这些通讯包。

  2。分析所抓包的内容;

  只要看一眼 web 认证过程产生的通讯包,你就明白我为什么说这种方法更简单了。简单讲,web 认证方式实际是客户端用 http 协议向 ISP 发送用户名、密码和 IP 等内容的过程。客户端读取认证页面;将填写好认证页面表格发送到 ISP 的认证服务器。过程就这么简单。

  3。编写生成这些包的程序;

  用任意一个支持 http 协议的语言或工具,编写向认证服务器 POST 认证页面中 form 的程序即可,甚至读取认证页面都不需要。我用 curl 和 python 各做了一个。如果你略微了解 http 协议,只要找到认证页面中向服务器 POST 用户名、密码等数据的 form,然后转换为你采用语言的语法格式就可以了,根本不需要分析认证页面中繁杂的 Javascripts。对计时窗发出的 keep-alive 包也采用同样的方法。

  例子:

  * 认证页面中的

代码如下:<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"><inputvalue="192.168.000.000" name="localip" type="hidden"><input value="0" name="IsIndex" type="hidden"> 用户名:<input name="username"> 密 码:<inputname="password" type="password"><input name="lianjiewangluo" type="submit">

* 用 curl 写的一个脚本:

bash/shell Code复制内容到剪贴板 #!/bin/bash     /etc/init.d/myiptablesstart     dhcpcdeth1     MYIP=`ifconfigeth1 grepinet sed's/^*//' sed's//:/g' cut-f3-d:`     echo$MYIP     UN=88888888     SERVER=61.61.61.61     curl--tracetrace.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

  方法 5 的总结:

  * 方法简单,思路清晰

  * 适应性广

  * 脚本实现,脱离浏览器和图形环境,更适于需要自动登录的环境(例如,自建的服务器)

  一些成功的例子:

  * whz81 朋友

  南京电信

  * zest 就是我

  西安铁通

  * 你的位置

  欢迎你与大家共同分享你的成功经验

  相关的链接:

  * 从特有的 DOMs 和 Markup 转移到 W3C 标准。http://www.stopbadtherapy.com/standards.shtml

  后记

  这篇小文是我在解决 Linux 下 Web 认证方式上网问题时的一些文字总结。由于本人的能力有限以及环境的限制,文中的内容肯定相当粗浅,会存在一些错误,希望各位能够批评指正,共同完善这篇文字。这里,我希望尽量说明解决问题的思路和方法,而不是只给出结果。授人以鱼,不如授人以渔。另外,这篇文字是两个时期完成的,方法 3 是在四月完成的。最近,七月,我的 ISP 改变了 Web 认证页面,所以产生了方法 5。为了保持延续性,没有删除方法 3,所以比较罗嗦。

  最后,欢迎大家分享自己的成功经验。

本文链接地址:https://www.jiuchutong.com/zhishi/277749.html 转载请保留说明!

上一篇:鸿蒙怎么添加应用到我的服务?鸿蒙添加应用到我的服务教程(鸿蒙怎么装app)

下一篇:outpost.exe - outpost是什么进程 有什么用

  • 中国城市人口密度榜出炉,根据统计显示,人口密度高的城市主要集中在长三角、珠三角

    中国城市人口密度榜出炉,根据统计显示,人口密度高的城市主要集中在长三角、珠三角

  • js for循环(js for循环等待1秒)

    js for循环(js for循环等待1秒)

  • 华为watch3pro怎么回复短信(华为watch3pro怎么关机)

    华为watch3pro怎么回复短信(华为watch3pro怎么关机)

  • iwatch换手机了怎么重新配对(iwatch换手机了怎么重新配对保留蜂窝套餐)

    iwatch换手机了怎么重新配对(iwatch换手机了怎么重新配对保留蜂窝套餐)

  • 小米手机怎么远程控制父母的手机(小米手机怎么远程开空调)

    小米手机怎么远程控制父母的手机(小米手机怎么远程开空调)

  • 华为荣耀20青春版几a充电(华为荣耀20青春版换屏幕多少钱)

    华为荣耀20青春版几a充电(华为荣耀20青春版换屏幕多少钱)

  • 微机中控制器的基本功能(微机控制器的工作原理)

    微机中控制器的基本功能(微机控制器的工作原理)

  • 石墨烯电池和铅酸电池的区别(石墨烯电池和铅酸电池哪个好)

    石墨烯电池和铅酸电池的区别(石墨烯电池和铅酸电池哪个好)

  • 华为手机电池鼓包了还能用吗(华为手机电池鼓起来了,把后盖顶起来了)

    华为手机电池鼓包了还能用吗(华为手机电池鼓起来了,把后盖顶起来了)

  • 苹果能悬浮歌词吗(苹果能悬浮歌词吗QQ音乐)

    苹果能悬浮歌词吗(苹果能悬浮歌词吗QQ音乐)

  • wps怎么复制部分内容(wps office如何复制)

    wps怎么复制部分内容(wps office如何复制)

  • 淘宝直播右下角的爱心是什么(淘宝直播右下角点赞有什么用处吗)

    淘宝直播右下角的爱心是什么(淘宝直播右下角点赞有什么用处吗)

  • 支付宝解绑淘宝账号(支付宝解绑淘宝号)

    支付宝解绑淘宝账号(支付宝解绑淘宝号)

  • 腾达a9红灯闪烁(腾达a9红灯闪烁怎么回事)

    腾达a9红灯闪烁(腾达a9红灯闪烁怎么回事)

  • iphonexsmax支持什么模式快充(iphonexsmax支持什么电话卡)

    iphonexsmax支持什么模式快充(iphonexsmax支持什么电话卡)

  • 苹果6s关机后开机显示无法激活(苹果6p关机后开不起来)

    苹果6s关机后开机显示无法激活(苹果6p关机后开不起来)

  • 大陆国行什么意思(大陆国行和国行有什么区别)

    大陆国行什么意思(大陆国行和国行有什么区别)

  • iphone11配的是什么耳机(iphone11配的是什么线)

    iphone11配的是什么耳机(iphone11配的是什么线)

  • t480和t480s区别(t480 480s区别)

    t480和t480s区别(t480 480s区别)

  • 淘宝退货申请在哪(淘宝退货申请在哪里申请)

    淘宝退货申请在哪(淘宝退货申请在哪里申请)

  • 抖音中321那种视频怎么做(抖音323是什么)

    抖音中321那种视频怎么做(抖音323是什么)

  • 快手号播放量低和号有关系吗(快手号播放量低怎么解决)

    快手号播放量低和号有关系吗(快手号播放量低怎么解决)

  • hasee是什么牌子电脑(hasco是什么品牌)

    hasee是什么牌子电脑(hasco是什么品牌)

  • 360极速浏览器如何切换极速模式(360极速浏览器如何快速播放)

    360极速浏览器如何切换极速模式(360极速浏览器如何快速播放)

  • 小米7如何导入联系人(小米如何导入旧手机数据)

    小米7如何导入联系人(小米如何导入旧手机数据)

  • mac打不开app store怎么办?解决苹果电脑mac App store打不开的方法介绍(mac打不开网页但是可以上微信)

    mac打不开app store怎么办?解决苹果电脑mac App store打不开的方法介绍(mac打不开网页但是可以上微信)

  • dmxlauncher.exe进程是病毒吗 危险吗 dmxlauncher进程信息查询(dmc32.dll)

    dmxlauncher.exe进程是病毒吗 危险吗 dmxlauncher进程信息查询(dmc32.dll)

  • 税务行政诉讼名词解释
  • 企业当年发放以往年度工资
  • 年金的扣费标准
  • 固定资产原值包含进项税吗
  • 代收水电费的账务处理
  • 合作社免税收入需要成本吗?
  • 外包人员的工资是费用吗
  • 总分机构如何纳税
  • 二手房增值税如何交
  • 长期合同收入与应收帐款如何处理?
  • 企业安装监控费用怎么做账
  • 2018税务金四发展预测会有哪些?
  • 初级备考日记
  • 定额发票上除了发票章还有其他章吗
  • 小规模财报是按年报吗
  • 一台设备发票开来0.5台怎么做账?
  • 美元兑人民币分时走势图
  • 联营企业分得的利润应计入什么科目
  • 企业所得税退税怎么做账务处理
  • 鸿蒙系统怎么设置导航键
  • 移动手机网速测试
  • 高新企业研发费用占销售收入的比例
  • 非货币性资产交换的会计处理
  • 如何用腾讯电脑管家删除文件
  • Linux系统中修改网络配置文件
  • PHP:xml_parser_free()的用法_XML解析器函数
  • 发票金额大于报销金额违法吗
  • 关于工程材料的质量控制说法正确的是
  • 抖音小程序任务哪里接
  • json格式字符串提取值
  • 普通增值税发票会计科目怎么写?
  • tensorflow安装教程pycharm
  • 庞塞 德莱昂
  • 现在用yii框架的人还多么
  • vue3怎么样
  • maven安装成功命令
  • chat p
  • reset=target
  • python中numpy数组和列表的区别
  • 应税工资和实发工资区别
  • 税务机关代开的增值税专用发票不含税销售额是什么意思
  • 帝国cms8.0
  • 税收种类包括哪几种
  • sqlserver2005没有服务器名称
  • sqlserver2005使用
  • sqlserver去掉字符串内的指定字符
  • 企业取得投资收益要交税吗
  • 转账进公户
  • 库存商品期末余额怎么计算
  • 进项税转出金额怎么算
  • 公司名下的车怎样领免检标志
  • 对外付汇代扣代缴所得税
  • 收到的业务赔偿如何入账
  • 人工费怎么核算
  • 成本结转怎么结转
  • 应付票据和应付债券的区别
  • 工程分包总包产生的 税费由谁承担
  • 海尔电脑优盘启动键
  • win81蓝屏重启故障
  • 微软停止更新win7
  • win10更新dx
  • windows server2012安装完没有桌面
  • linux远程更新程序
  • Mtdacq.exe - Mtdacq是什么进程 有什么用
  • win8全屏快捷键
  • Win10 Mobile 10586.36在Lumia640 XL中的体验 很流畅
  • win10系统开机桌面图标不见了
  • unity3d怎么编程
  • Extjs Label的 fieldLabel和html属性值对齐的方法
  • androidsocket原理
  • windowsxp命令行窗口怎么打开
  • centos安装完成后桌面没有图标
  • python中flask模块
  • Errors running builder 'Android Resource Manager' on Project java.lang.NullPointerException
  • jQuery实现ajax的叠加和停止(终止ajax请求)
  • 使用灭火器时要对准火焰的什么部位喷射
  • multiset volatile
  • 国家税务局开票软件下载
  • 为什么电子发票没有监制章
  • 资源税的税目共有七个其中包括
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设