2015-05-15 10 views
1

Я использую 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 ] 

Вам ничего не сказано?

+0

UPDATE: Я сделал немного прогресса, я думаю, но все равно ничего не получаю. По крайней мере, код действителен. Я использовал \t \t \t \t sIP = пакет.getHeader (ip, 1) .source(); – giorgos

ответ

0

Привет, правильно использовать пакет.hasHeader (ip, 1). Это получит второй экземпляр IPv4 и привяжет его к пакету. Также обратите внимание, что использование getHeader излишним. HasHeader автоматически связывает заголовок с пакетом, если заголовок существует.

т.е. if(packet.hasHeader(ip, 1)) { sIP=ip.source(); sourceIP = org.jnetpcap.packet.format.FormatUtils.ip(sIP); }

Чтобы визуализировать и для целей отладки и точно узнать, какие заголовки были расчленены и сохраняются в таблице состояний пакетов используйте следующий фрагмент кода, чтобы сбросить содержимое:

System.out.println(packet.getState().toDebugString());

Надеюсь, это поможет.

+0

Эй, это Марк. Спасибо за ваш ответ. Как вы видите на моем комментарии выше, я уже использовал если (packet.hasHeader (ф, 1)) , но я получаю сообщение об ошибке: Исключения в потоке «основного» java.lang.NullPointerException \t в diplomatiki .Ex2.main (Ex2.java: 83) ..Line 83 is: \t \t \t sIP = packet.getHeader (ip, 1) .source(); Я получаю только 3 пакета до ошибки. Я попробовал ваш совет, и у меня есть то, что у четвертого пакета. Но я не вижу ничего странного. См. Вышеприведенную ошибку. – giorgos

0

Вы все еще используете экземпляр 1 getHeader, где он не существует (т. Е. В 4-м пакете). Опять же, я бы посоветовал вместо этого использовать hasHeader. Тот же результат, но не генерирует исключений null, если экземпляр заголовка не существует. Если вам также необходимо заголовок ICMP затем объединить их в один, если() заявление:

if(packet.hasHeader(ip, 1) && packet.hasHeader(icmp)) { sIP = ip.source(); }

+0

Я попробовал. Я до сих пор ничего не получаю. Я запускаю System.out.println (package.getState(). ToDebugString()); , чтобы узнать, что случилось, и я не получаю заголовков – giorgos

+0

JMemory: JMemory @ 440000class org.jnetpcap.packet.JPacket $ State: size = 120 bytes JMemory: owner = package.JScanner.class (размер = 136528/offset = 131328) JPacket.State # 1643: SizeOf (packet_state_t) = 120 JPacket.State # 1643: SizeOf (header_t) = 40 и * 0 = 0 JPacket.State # 1643: pkt_header_map = 0x0 JPacket.State # 1643: pkt_flags = 0x1 JPacket.State # 1643: pkt_header_count = 0 JPacket.State # 1643: pkt_wirelen = 60 JPacket.State # 1643: [Protocol (ID/Flag) | Начало | Префикс | Заголовок | Пробег | Полезная нагрузка | Postfix] – giorgos

+0

Я думаю, что что-то не так с pcap – giorgos

 Смежные вопросы

  • Нет связанных вопросов^_^