Я использую jnetpcap для анализа файлов pcap. Я знаю, как получить адреса, когда я сталкиваюсь заголовок IPКак получить IP-адрес от ICMP-пакетов с помощью jnetpcap
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);
, но, видимо, это недействительно. Есть идеи? Спасибо заранее
UPDATE: Я использовал
if(packet.hasHeader(ip, 1)) {
sIP=ip.source();
sourceIP = org.jnetpcap.packet.format.FormatUtils.ip(sIP);}
, но я получил ошибку:
Исключение в потоке «основного» java.lang.NullPointerException в diplomatiki.Ex2.main (Ex2.java:83)
Строка 83 содержит команду:
sIP=packet.getHeader(ip,1).source();
Я попытался ударить совет Марка, и добавил
System.out.println(packet.getState().toDebugString());
Я понял, что программа застряла в третьем пакете, поэтому я попытался получить то, что находится в четвертом. Это то, что я получил:
JMemory: [email protected] 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 ]
Вам ничего не сказано?
UPDATE: Я сделал немного прогресса, я думаю, но все равно ничего не получаю. По крайней мере, код действителен. Я использовал \t \t \t \t sIP = пакет.getHeader (ip, 1) .source(); – giorgos