迷途書童

          敏感、勤學、多思
          隨筆 - 77, 文章 - 4, 評論 - 86, 引用 - 0
          數據加載中……

          Ethereal抓包實時分析可行性研究

          Ethereal是一個功能強大的抓包工具,它提供的GUI工具能將經過網卡的信令捕獲并實時顯示,但是在實際應用中,我們還可能要對捕獲的日志進行分析,以獲得自己關心的信令的統計結果,但是這樣就面臨著以下幾個問題:
          1. 當Ethereal自身提供的簡單統計功能不能滿足需求時,我們該怎么辦?
          2. Ethereal的GUI工具生成的日志是它專有的libpcap格式,不適合人類閱讀,我們該怎么分析它?
          本文針對上述問題提供了一整套的解決方案。

          一. 用Ethereal實時捕獲信令。

          Ethereal提供了從命令行定制啟動的方案。我們可以利用這個特點將capture file輸出到指定的目錄,這個capture file將被Ethereal實時更新。
          下面是我寫的一個windows bat文件,用該文件能做到最簡單地啟動Ethereal截包,不用用戶學習怎樣配置Ethereal。

          …………………………………………………………………………………………………………
          rem @echo off
          set ETHEREAL_HOME="D:\Program Files\Ethereal\ethereal.exe"
          set NETWORK_CARD="\Device\NPF_{D239E06D-D86E-4CFC-A360-0D74CDD21CAE}"
          set ETHEREAL_OPT=-i %NETWORK_CARD%
          set ETHEREAL_OPT=%ETHEREAL_OPT% -klSQ
          set FILTER_STR="port 6000 or port 6001 or port 6002 or port 6003 or port 6004 or port 6005 or port 6006 or port 6007 or port 6008"
          rem set ETHEREAL_OPT=%ETHEREAL_OPT% -f %FILTER_STR%
          set ETHEREAL_OPT=%ETHEREAL_OPT% -o capture.real_time_update:TRUE -o capture.auto_scroll:TRUE -o capture.show_info:FALSE -o print.format:text -o print.destination:file -o print.file:ethereal.out
          rem -a filesize:1000 files:5 -b filesize:1000 files:5
          call %ETHEREAL_HOME% %ETHEREAL_OPT% -w c:\ethereal.out
          …………………………………………………………………………………………………………
          將上面這段script存為bat文件后,設置好ETHEREAL_HOME和網卡即可啟動Ethereal截包。

          二. 實時分析Ethereal的中間人實現。

          “計算機科學中的所有問題都能通過中間人的方式解決。”這是精通EJB中強調了很多次的名言。
          在上節所示的腳本中我們將Ethereal的存放日志的文件放在了“c:\ethereal.out”目錄下,這個文件能被Ethereal實時更新,但是它的內容卻是不可讀的,我們可用Ethereal提供的Tethereal工具將此文件轉換為適合人類閱讀的文本。但是這個工具僅能將標準的capture file解析成可讀文本并在標準輸出設備顯示(一般為顯示器),沒有找到將其另存為文本的方法,我們也不需要此方法。可以用java.lang.Runtime.exec()方法執行“tethereal -r infile.cap -V”,獲得這個進程的對象后我們可以得到這個進程對象的輸出流對象,接下來我們可以從這個輸出流中讀出結果進行分析。

          三. 得到實時的統計結果
          可以對從輸出流中得到的可讀結果進行分析,獲得自己想要的統計結果。我們可以用一個線程以一定的時間間隔刷新此輸出流,已達到用戶認為的實時分析的效果。

          參考:
          http://www.ethereal.com
          java doc
          ?
          ?

          后來想到的更好的方案:

          這種方式有一個顯著的缺點,如果用戶截包時間的變長,ethereal保存log的文件越來越大,將導致每次刷新輸出流越來越耗資源,最后將導致工具無法使用。

          新的解決方案就是用ethereal的命令行版本,tethereal就可以完美避免類似問題。

          用java的runtime.exec()調用此腳本:

          -------------------

          set TETHEREAL_HOME="D:\Program Files\Ethereal\tethereal.exe"
          rem call cmd /k %TETHEREAL_HOME% -r c:\ethereal.out -R tcp -T text -V
          call cmd /k %TETHEREAL_HOME% -r c:\ethereal.out -T text -V

          ----------------

          ethereal每截到一個數據包,便會將次包送給輸出流。這樣就能真正做到實時分析了。

          posted on 2006-05-06 15:55 迷途書童 閱讀(7284) 評論(5)  編輯  收藏 所屬分類: java應用

          評論

          # re: Ethereal抓包實時分析可行性研究[未登錄]  回復  更多評論   

          shenme dong xi a,kan bu ming bai ya
          2007-06-26 20:20 | yang

          # re: Ethereal抓包實時分析可行性研究  回復  更多評論   

          很經典的使用范例,支持,繼續啊,最好,再講講Java的部分,說的再詳細點就好了
          2008-05-29 14:52 | useway

          # re: Ethereal抓包實時分析可行性研究  回復  更多評論   

          一樓的,這個文章寫的那么清楚,你都看不懂,看來是有點笨。
          給摟主一個建議,可以用-a參數,將文件大小限定。
          2008-05-29 14:58 | useway

          # re: Ethereal抓包實時分析可行性研究[未登錄]  回復  更多評論   

          這個確實很有用,我也是到了java部分,不知道怎么做.請問樓主可以詳細解釋嗎?或者也給個代碼。
          2008-10-27 16:03 | ben

          # re: Ethereal抓包實時分析可行性研究[未登錄]  回復  更多評論   

          經過運行,并不能實現實時效果。調用第二個腳本,只能獲得調用腳本時獲得的包信息,運行一段時間后,新來的包還是不能被解釋,而用重新調用此腳本才能獲得內容
          2008-11-24 10:40 | ben
          主站蜘蛛池模板: 射阳县| 文水县| 梧州市| 龙川县| 桐梓县| 定兴县| 苏尼特左旗| 荆门市| 西和县| 忻城县| 合作市| 乳源| 安图县| 庐江县| 开原市| 磐安县| 高阳县| 堆龙德庆县| 瑞丽市| 桂平市| 涟源市| 青浦区| 陇川县| 车致| 海门市| 黔江区| 望都县| 静海县| 舞钢市| 军事| 宁津县| 麦盖提县| 彝良县| 平遥县| 东海县| 辽中县| 芜湖县| 于田县| 屯门区| 钦州市| 长汀县|