我只是四處張望,想找出如何製作一個程序,它可以嗅探我在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