我怎样才能在Java中嗅探网络流量?

我只是四处寻找如何制作一个程序来嗅探我在Java中的网络流量,但我找不到任何东西。 我想知道是否有任何方法可以查看网络流量。 我听说有一个Socket的想法,但我不明白这是怎么回事。 所以无论如何,只是寻找API或自己编写它的方法。

编辑:我很乐意喜欢API,但我还想澄清使用Socket嗅探流量的方法。

jpcap , jNetPcap – 这些是Java中的pcap包装项目。

Kraken – 类似的项目,有大量的例子。

来自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); } } 

另一个Java libpcap包装器是https://github.com/kaitoy/pcap4j

Pcap4J是一个用于捕获,制作和发送数据包的Java库。 Pcap4J通过JNA包装本机数据包捕获库(libpcap或WinPcap),并为您提供面向Java的API。

你需要一个数据包嗅探器api,也许netutils是你需要的:

‘netutils’包提供了一个低级别的java网络库。 它包含用于嗅探,注入,构建和解析以太网/ IP / TCP / UDP / ICMP数据包的广泛基础设施。

没有告诉任何API或java相关的东西,但如果你真的只想嗅探数据用于分析目的,那么给try: WireShark 。 它是一个用于网络分析的应用程序。

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