熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Oracle >> 正文

如何在 Linux 下通過 WEB 認證方式上網

2013-11-13 15:38:40  來源: Oracle 

  摘要
  通過分析 windoze 下 Web 認證過程提出在 Linux 中用*腳本*實現通過 Web 認證方式上網的方法
  
  問題由來
  
  近來隨著寬帶入戶越來越多的 ISP 采用 Web 認證這種接入認證技術Web 認證從用戶的角度看是指用戶在浏覽器中通過 Web 頁面輸入用戶名和密碼的認證過程多數 ISP 號稱無需客戶端軟件實際情況卻是Windoze 下用戶可以順利通過 Web 認證上網但 Linux 用戶卻沒有這麼幸運
  
  分析原因
  什麼原因呢?解決問題還需從分析認證頁面入手下面的分析主要針對我這裡的情況在 Mozilla 中打開認證頁面後沒有顯示任何內容仔細分析認證頁面發現認證頁面采用 JavaScripts 編寫並且是針對 IE 編制的IE 並未完全按照標准使用 JavaScriptsIE 對 JavaScripts 做了一些擴充主要有以下幾項
  
  * cab files for download of binaries
  * documentall
  * elementinnerHTML
  
  詳情請參閱
IE 對 JavaScripts 的這些擴充Mozilla 是不支持的實際上 Mozilla 對標准 JavaScripts 的支持比 IE 好所以這些有 IE 特點的認證頁面 Mozilla 等浏覽器自然無法通過了
  
  從用戶浏覽器的角度看Web 認證除了通過 Web 頁面輸入用戶名和密碼外還需要通過 http 協議傳送客戶由 DHCP 獲得的 IP有些 ISP 在用戶登錄到認證頁面時由浏覽器自動下載 cab 文件然後執行該文件獲得用戶的 IP再傳給 Web Server還有些 ISP 在用戶通過認證後會在客戶端彈出一個計時窗定時向 ISP 發送 keepalive 包當然Web 認證是一個比較新的方式還沒有形成標准所以各提供商的方法也不盡相同所謂各村有各村的高招你那裡的方法就很有可能與我的不同但道理應該是一樣的根據以上的分析可以看出 Linux 用戶自然不可能用非 IE 兼容的浏覽器直接通過登錄 Web 認證界面上網啦
  
  解決方法
  好了問題就在這些 Web 頁面使用 IE 方言的 JavaScripts 上有幾種解決方法
  使用 Linux 下 IE 兼容的浏覽器有嗎?誰知道請告訴我
  使用 wine + IE 的方法有成功的嗎?大家共同分享
  如果將這些鳥語改為普通話我們就可以用 Mozilla 等非 IE 浏覽器通過 Web 認證方式上網了
  要求 ISP 提供支持 WC 標准的認證頁面
  分析 web 認證的原理編寫認證程序
  
  最理想的方法四可是我等不急也不一定能等到也許你比我幸運我采取第三種方法對於方法三你一定會問認證頁面在 Web Server 上我無權修改行不通確實如此這裡有個變通的辦法下載認證頁面按照 JavaScripts 標准修改並保存在本地每次上網前用本地經過修改的 Web 認證頁面而非 Web Server 的認證頁面就可以了具體修改方法參照 中的對照表找出認證頁面使用 IE 方言的 JavaScritps根據對照表提供的修改建議對你的認證頁面作出相應修改對於使用cab 的認證頁面情況就比較復雜需要分析這個cab 在你的 JavaScripts 中的用法判斷它的功能我這裡是用它獲得本地 IP所以我在本地執行腳本獲得 IP 來模擬這個功能似乎cab 多與 IP 有關
  
  一個例子
  * 以我這裡為例我的使用環境
  ISP鐵通 ADSL
  認證方式Web 認證
  ISP 的接入服務器華為 Quidway MAE/F (具體型號不能完全確定)
  LinuxGENTOO rc
  Browser Mozilla a/Phoenix
  
  * 在 Linux 下用 mozilla (一定要用非 IE 浏覽器獲得認證頁面這話有點多余但有的用戶是在 Window$ 下調試的)訪問 ISP 的 WEB 認證頁面時浏覽器中沒有顯示任何內容根本無法輸入帳號和密碼更談不上通過認證這難不倒咱 linuxer 查看認證頁面(/indexjsp)源碼發現這兩段 javascript
  
  id=PortalClient
  codebase=#version=
  
  var clientIp = PortalClientlocalIP;
  var languagetype = ;
  if ((clientIp==)||(clientIp==null)) {
  windowparentlocation;
  } else {
  windowparentlocation+clientIp+&newbl=+languagetype;
  }
  
  可以看出它用 PortalClient 獲得本地的 IP如果成功轉到 ?ip=你當前的IP 而 Mozilla 不支持它獲取 IP (PortalClient是針對IE的這個程序編得太短視)看來問題出在這裡既然如此我們可以手工加上自己的 IP(這個 IP 是與 ADSL 相聯的網卡從 ISP 的 DHCP 服務器獲得的地址)在 Mozilla 地址欄中輸入
  
  ?ip=
  ^^^^^^^^^^^^^^^^^^^^^^
  你的ISP認證服務器 你當前的IP
  
  嗒嗒登錄頁面出來啦!
  趕快輸入帳號密碼按登錄按鈕(期待中
  viva!!!
  ISP 的首頁終於被揪出來啦在終端中 ping ping 通沒問題
  
  * 至此在 Linux 下 web 認證方式已經完成方法很簡單每次上網時在 mozilla 的地址欄中輸入
  ?ip=你當前的IP
登錄頁面出來後和 IE 中的操作過程完全一樣
  
  * 當然你可以把這些步驟寫成一個腳本以後簡單執行腳本就可以了
  #!/bin/bash
  dhcpcd eth
  phoenix ?ip=`ifconfig eth|grep inet|sed s/^ *//|sed s/ /:/g|cut f d:` &
  
  說明
  eth 是與 ADSL 聯的網卡名根據你的實際情況填寫
   是我這 ISP 的認證地址
  後面一段是獲得 eth 的 ip 地址
  注意!一定要用非 IE 浏覽器獲得調試認證頁面因為 IE 可以執行認證頁面的 JavaScripts有些認證過程實際上是執行多個頁面完成的IE 最後停留的頁面不一定是起始的認證頁面你有可能漏掉前面的重要信息我這裡就是這種情況
  
  另外一種方法
  如果你對方法 不滿意可以用方法 繼續分析 web 認證的原理編寫自己的認證程序其實搞清原理後實現的方法更簡單更靈活而且在 ISP 要求客戶端定時發送 keepalive 包的情況下也只能采取這種方法我是這樣做的
  
  用網絡分析軟件(如ethereal)抓取正常認證過程的通訊包
  在 windoze 下用 ethereal 抓包注意抓包時除了 IE 不要啟動其它產生網絡通訊的程序以免產生干擾數據保存這些通訊包
  
  分析所抓包的內容
  只要看一眼 web 認證過程產生的通訊包你就明白我為什麼說這種方法更簡單了簡單講web 認證方式實際是客戶端用 http 協議向 ISP 發送用戶名密碼和 IP 等內容的過程客戶端讀取認證頁面將填寫好認證頁面表格發送到 ISP 的認證服務器過程就這麼簡單
  
  編寫生成這些包的程序
  用任意一個支持 http 協議的語言或工具編寫向認證服務器 POST 認證頁面中 form 的程序即可甚至讀取認證頁面都不需要我用 curl 和 python 各做了一個如果你略微了解 http 協議只要找到認證頁面中向服務器 POST 用戶名密碼等數據的 form然後轉換為你采用語言的語法格式就可以了根本不需要分析認證頁面中繁雜的 Javascripts對計時窗發出的 keepalive 包也采用同樣的方法
  
  例子
  * 認證頁面中的 form
  
  
  action="">   type="hidden" name="connectname" value="">   name="connecttype" type="hidden">   type="hidden">   value="192.168.000.000" name="localip" type="hidden">   name="IsIndex" type="hidden"> 用戶名 密 碼  name="password" type="password">   type="submit">
  
  
  * 用 curl 寫的一個腳本
  
  #!/bin/bash
  /etc/initd/myiptables start
  dhcpcd eth
  
  MYIP=`ifconfig eth|grep inet|sed s/^ *//|sed s/ /:/g|cut f d:`
  echo $MYIP
  UN=
  SERVER=
  
  curl trace tracetxt A Mozilla d username=$UN&password=&localip=$MYIP&connectname=&connecttype=
  
  
  說明curl 是一個用 url 語法傳輸文件的命令行程序支持 httpftp 等協議類似 wget
  上例中curl 的命令行參數 A 指明客戶端的類型這是服務器為了安全需要指明Mozilla 或 IE 都可以我更願意用 Mozilla d 是必需的表示用 POST 方法d 後的內容就是用戶名密碼 IP 地址等信息根據你的認證頁面中 form 的 input 項目填寫內容與其保持一致參數間用 & 分開後面是認證頁面的地址執行這個腳本後返回 OK表示認證成功否則仔細檢查 d 後的參數
From:http://tw.wingwit.com/Article/program/Oracle/201311/17065.html
  • 上一篇文章:

  • 下一篇文章:
  • Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.