2014-10-02 99 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。它是一个用于网络分析的应用程序。

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