我正在使用 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);}
但我得到一个错误:
在 Diplomatiki.Ex2.main(Ex2.java:83) 的线程“main”java.lang.NullPointerException 中出现异常
第 83 行包含以下命令:
sIP=packet.getHeader(ip,1).source();
我试图听从马克的建议,并补充说
System.out.println(packet.getState().toDebugString());
我意识到程序卡在第三个数据包上,所以我试图获取第四个数据包中的内容。这就是我得到的:
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 ]
它对你说什么吗?