2014-10-02 98 views
7

我只是四處張望,想找出如何製作一個程序,它可以嗅探我在Java中的網絡流量,但是我找不到任何東西。我想知道是否有任何方法查看通過的網絡流量。我聽說有一個想法Socket,但我不明白這是如何工作的。無論如何,只需要尋找一個API或者自己寫一個方法。我怎麼能嗅探Java中的網絡流量?

編輯: 我很樂意喜歡一個API,但我也想澄清的方式來嗅探流量與套接字。

+0

你不能用一個Java'Socket.' – EJP 2014-10-02 01:45:44

+0

@EJP做到這一點,顯然bjlee剛表示,他與C++原始套接字做到了。只是指出。 – 2014-10-06 02:53:01

回答

6

jpcapjNetPcap - 這些是Java中的pcap包裝項目。

Kraken - 類似的項目,有很多實例記錄。從海妖網站

簡單的例子:

public static void main(String[] args) throws Exception { 
    File f = new File("sample.pcap"); 

    EthernetDecoder eth = new EthernetDecoder(); 
    IpDecoder ip = new IpDecoder(); 
    TcpDecoder tcp = new TcpDecoder(new TcpPortProtocolMapper()); 
    UdpDecoder udp = new UdpDecoder(new UdpPortProtocolMapper()); 

    eth.register(EthernetType.IPV4, ip); 
    ip.register(InternetProtocol.TCP, tcp); 
    ip.register(InternetProtocol.UDP, udp); 

    PcapInputStream is = new PcapFileInputStream(f); 
    while (true) { 
     // getPacket() will throws EOFException and you should call is.close() 
     PcapPacket packet = is.getPacket(); 
     eth.decode(packet); 
    } 
} 
+0

這有助於解決問題,但如果能夠通過套接字來解決問題,那將會非常棒。 – 2014-10-02 01:03:45

+0

@JavaIsCool,我認爲使用Socket的想法很難實現。它需要大量的網絡知識,包括RAW套接字。一旦我在C++上使用RAW套接字實現了類似的解決方案,但我從來不建議您遵循類似的步驟。 – 2014-10-02 01:06:07

+0

好的!感謝您的反饋! – 2014-10-02 01:07:30

1

你需要一個包嗅探器API,也許netutils是你所需要的:

的「netutils」包給人一種低水平的Java網絡類庫。它包含用於嗅探,注入,構建 以及解析以太網/ IP/TCP/UDP/ICMP數據包的廣泛基礎設施。

4

另一個Java libpcap的包裝物上https://github.com/kaitoy/pcap4j

Pcap4J是一個Java庫,用於捕獲,起草和發送數據包。 Pcap4J通過JNA封裝了一個本地數據包捕獲庫(libpcap或WinPcap),併爲您提供了面向Java的API。

+0

這是唯一仍然保留的程序。 – Vangel 2016-12-02 08:19:20

0

不告訴任何API或Java相關的東西,但如果你真的只想嗅探數據的分析目的,然後試試:WireShark。它是一個用於網絡分析的應用程序。

它有用,如果有人不知道。