Java 網絡數據分析包 JNetStream
JNetStream 是一個用 Java 語言開發的網絡數據包分析類庫,同時也提供了一個分析工具。可以通過內置的NPL語言定義自己需要的協議 (比如可用NPL定義RTP與SIP協議),NPL的語法與Java/C相似。JNetStream還提供一個NPL語言調試器。
package org.jnetstream.example;import java.io.File; import java.io.IOException; import java.nio.ByteBuffer;
import org.jnetpcap.packet.JMemoryPacket; import org.jnetpcap.packet.PeeringException; import org.jnetpcap.protocol.JProtocol; import org.jnetstream.capture.Captures; import org.jnetstream.capture.FileFormatException; import org.jnetstream.capture.FileMode; import org.jnetstream.capture.file.RecordIndexer; import org.jnetstream.capture.file.pcap.PcapFile; import org.jnetstream.capture.file.pcap.PcapRecord;
/**
- A little test program to see what it would take to use jNetPcap to decode
- jNetStream read packets. We take a pcap capture file, open it for read-write
- with memory mapping so that we can peer natively with the underlying data.
- @author Mark Bednarczyk
@author Sly Technologies, Inc. */ public class DecodeUsingJNetPcap {
/**
- Entry point.
- @param args
ignored */ public static void main(String[] args) {
try { PcapFile pcap = Captures.openFile(PcapFile.class, new File("tests/test-l2tp.pcap"),
FileMode.ReadWriteWithMap);
RecordIndexer records = pcap.getRecordIndexer();
long count = pcap.getPacketCount();
for (long i = 1; i < count; i++) {
PcapRecord record = records.get(i); ByteBuffer b = record.getRecordBuffer();
JMemoryPacket packet = new JMemoryPacket(JProtocol.ETHERNET_ID, b);
System.out.println(packet); }
pcap.close();
} catch (FileFormatException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (PeeringException e) { e.printStackTrace(); } } }</pre>