我只是四处张望,想找出如何制作一个程序,它可以嗅探我在Java中的网络流量,但是我找不到任何东西。我想知道是否有任何方法查看通过的网络流量。我听说有一个想法Socket,但我不明白这是如何工作的。无论如何,只需要寻找一个API或者自己写一个方法。我怎么能嗅探Java中的网络流量?
编辑: 我很乐意喜欢一个API,但我也想澄清的方式来嗅探流量与套接字。
我只是四处张望,想找出如何制作一个程序,它可以嗅探我在Java中的网络流量,但是我找不到任何东西。我想知道是否有任何方法查看通过的网络流量。我听说有一个想法Socket,但我不明白这是如何工作的。无论如何,只需要寻找一个API或者自己写一个方法。我怎么能嗅探Java中的网络流量?
编辑: 我很乐意喜欢一个API,但我也想澄清的方式来嗅探流量与套接字。
jpcap,jNetPcap - 这些是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);
}
}
这有助于解决问题,但如果能够通过套接字来解决问题,那将会非常棒。 – 2014-10-02 01:03:45
@JavaIsCool,我认为使用Socket的想法很难实现。它需要大量的网络知识,包括RAW套接字。一旦我在C++上使用RAW套接字实现了类似的解决方案,但我从来不建议您遵循类似的步骤。 – 2014-10-02 01:06:07
好的!感谢您的反馈! – 2014-10-02 01:07:30
你需要一个包嗅探器API,也许netutils是你所需要的:
的“netutils”包给人一种低水平的Java网络类库。它包含用于嗅探,注入,构建 以及解析以太网/ IP/TCP/UDP/ICMP数据包的广泛基础设施。
另一个Java libpcap的包装物上https://github.com/kaitoy/pcap4j
Pcap4J是一个Java库,用于捕获,起草和发送数据包。 Pcap4J通过JNA封装了一个本地数据包捕获库(libpcap或WinPcap),并为您提供了面向Java的API。
这是唯一仍然保留的程序。 – Vangel 2016-12-02 08:19:20
不告诉任何API或Java相关的东西,但如果你真的只想嗅探数据的分析目的,然后试试:WireShark
。它是一个用于网络分析的应用程序。
它有用,如果有人不知道。
你不能用一个Java'Socket.' – EJP 2014-10-02 01:45:44
@EJP做到这一点,显然bjlee刚表示,他与C++原始套接字做到了。只是指出。 – 2014-10-06 02:53:01