jnetpcap を使用して pcap ファイルを分析しています。IP ヘッダーに遭遇したときにアドレスを取得する方法を知っている
if(packet.hasHeader(ip)&&packet.hasHeader(tcp)&&tcp.flags_SYN())
{
sIP = packet.getHeader(ip).source();
sourceIP = org.jnetpcap.packet.format.FormatUtils.ip(sIP);
しかし、ICMP ヘッダーがある場合にアドレスを取得する方法がわかりません。私はこれを試しました
else if(packet.hasHeader(icmp))
{
sIP=packet.getHeader(icmp).source();
sourceIP = org.jnetpcap.packet.format.FormatUtils.ip(sIP);
しかし、明らかに、それは有効ではありません。何か案は?前もって感謝します
更新:使用しました
if(packet.hasHeader(ip, 1)) {
sIP=ip.source();
sourceIP = org.jnetpcap.packet.format.FormatUtils.ip(sIP);}
しかし、エラーが発生しました:
Exception in thread "main" java.lang.NullPointerException atdiplotiki.Ex2.main(Ex2.java:83)
行 83 には、次のコマンドが含まれています。
sIP=packet.getHeader(ip,1).source();
私はマークのアドバイスを打ってみました、そして追加しました
System.out.println(packet.getState().toDebugString());
プログラムが 3 番目のパケットでスタックしていることに気付いたので、4 番目のパケットの内容を取得しようとしました。これは私が得たものです:
JMemory: JMemory@4b8838class org.jnetpcap.packet.JPacket$State: size=240 bytes
JMemory: owner=packet.JScanner.class(size=136528/offset=35128)
JPacket.State#004: sizeof(packet_state_t)=120
JPacket.State#004: sizeof(header_t)=40 and *3=120
JPacket.State#004: pkt_header_map=0x16
JPacket.State#004: pkt_flags=0x0
JPacket.State#004: pkt_header_count=3
JPacket.State#004: pkt_wirelen=62
JPacket.State#004 : [ Protocol(ID/Flag) | Start | Prefix | Header | Gap | Payload | Postfix ]
JPacket.State#004[0]: [ ETHERNET( 1/0800) | 0 | 0 | 14 | 0 | 48 | 0 ]
JPacket.State#004[1]: [ IP4( 2/0800) | 14 | 0 | 20 | 0 | 28 | 0 ]
JPacket.State#004[2]: [ TCP( 4/0800) | 34 | 0 | 28 | 0 | 0 | 0 ]
それはあなたに何かを言いますか?