2011-05-19 67 views
0

我想問一下如果有一種方法可以捕獲數據包,即將通過網絡從我的計算機發送給其他人。是否可以用一些java庫來設計那樣嗎?在通過網絡發送之前捕獲我的數據包


編輯 我不想程序..我想一個方法來創建這樣一個程序,用Java編寫的......我可以JPCAP發送數據包,但我不希望創建的包,我想取出我的電腦發送的數據包並在發送之前編輯它們。

回答

0

我想在理論上,你可以創建一個替代的「SocketImpl」類,並配置你的應用程序使用它通過配置一個自定義套接字工廠作爲默認值。這種方法無法捕獲TCP/IP數據包,但它可以在將數據寫入OS級套接字之前捕獲這些數據。

如果您想捕獲網絡數據包並在途中編輯它們,您可能需要使用主機OS的IP過濾基礎結構。這將是不可移植的,技術上覆雜的,並且在下面的區域配置會很痛苦。更甚者,如果你嘗試用Java實現它(使用JNI或JNA)。

(據我所知,像Wireshark的工具只讓你看到的數據包,什麼在他們,他們can't change the packets

1

在Linux操作系統(即Linux內核),你的目標是不那麼容易才達到...但您可以使用軟件sniffjoke使用的相同技術:即隧道。通過這種方式,您可以攔截所有發送的數據包(通過您的應用程序),因此您可以修改/更改它們(就像sniffjoke一樣)。爲了幫助你,有一個名爲janus(https://github.com/evilaliv3/janus)的項目(開放源代碼),它覆蓋了實際的路由表,創建了一個僞造的網關,目的是在內核之後(在外出流量上)和內核之前)。