2015-11-13 6 views
0

Итак, у меня есть файл pcap, когда я открываю этот файл в wirehark, я вижу несколько отмеченных параметров, одним из которых является ssid, который я хотел бы просто распечатать на экране.Чтение ssid из файла pcap с помощью jnetpcap

я сделал следующее:

public class PacketHandler implements PcapPacketHandler<Object> { 
    @Override 
public void nextPacket(PcapPacket packet, Object unused) { 
    StringBuilder str = new StringBuilder(); 

    packet.getUTF8String(0, str, packet.getTotalSize()); 
    String rawStringData = str.toString(); 
    System.out.println(rawStringData); 

    String packetAsHex = packet.toHexdump(0, false, true, true); 

    System.out.println(packetAsHex); 
} 

} 

Я вижу SSID в виде строки, но это выглядит как-то не декодируется правильно, в идеале я хотел бы иметь возможность получить все эти меченых параметров я см. в проводах.

Увы, я не знаю, как этого добиться, может ли кто-нибудь поставить меня на правильный путь?

ответ

0

Что не декодируется правильно? Что вы ожидаете и что видите? Параметры не отмечены каким-либо образом. У них просто есть определенные байты, предназначенные для них. Вы просто должны знать, где искать.

Позвольте мне показать вам пример моего старого кода jnetpcap. Теперь, поскольку вы знакомы с jnetpcap, и я не могу понять, в чем проблема, я просто покажу вам фрагмент кода, предполагая, что вы его повесите.

Код ниже - мой разбор Beacon Frames. data - это данные, извлеченные из файла.

 int packet_size = packet.size(); 
     JBuffer packet_buf = packet; 

     byte[] data = packet_buf.getByteArray(0, packet_size); 
     int[] data_int = new int[max_byte_read]; 

     for (int k = 0; k<max_byte_read; k++) { 
      data_int[k] = data[k]&0xFF; 
     } 

     byte[] frame_control = new byte[2]; 
     byte[] duration = new byte[2]; 
     byte[] dest_ip = new byte[6]; 
     byte[] src_ip = new byte[6]; 
     byte[] bss_id = new byte[6]; 
     byte[] seq_ctrl = new byte[2]; 
     byte[] time_stamp = new byte[8]; 
     byte[] beacon_interval = new byte[2]; 
     byte[] capability_info = new byte[2]; 
     byte[] tag_nr = new byte[1]; 
     byte[] tag_len = new byte[1]; 

     if (data_int[0]==0x80) { 
      // It's a beacon 
      System.out.printf("It's a beacon!\n"); 
      frame_control = Arrays.copyOfRange(data, 0, 2); 
      duration = Arrays.copyOfRange(data, 2, 4); 
      dest_ip = Arrays.copyOfRange(data, 4, 10); 
      src_ip = Arrays.copyOfRange(data, 10, 16); 
      bss_id = Arrays.copyOfRange(data, 16, 22); 
      seq_ctrl = Arrays.copyOfRange(data, 22, 24); 
      time_stamp = Arrays.copyOfRange(data, 24, 32); 
      beacon_interval = Arrays.copyOfRange(data, 32, 34); 
      capability_info = Arrays.copyOfRange(data, 34, 36); 
      tag_nr = Arrays.copyOfRange(data, 36, 37); 
      tag_len = Arrays.copyOfRange(data, 37, 38); 

      int ss_id_len = tag_len[0]; 

      byte[] ss_id = new byte[ss_id_len]; 

      ss_id = Arrays.copyOfRange(data, 38, 38+ss_id_len); 

      System.out.printf("SSID: "); 
      for (byte b : ss_id) { 
       int c = b&0xFF; 
       System.out.printf("%s", (char) c);  
      } 
      System.out.println(""); 
     } 
     else { 
      System.out.println("Not a beacon unfortunately"); 
     } 

Если это вам все равно не поможет, я могу попытаться опубликовать полный пример. Но так как это может переусердствовать, я буду придерживаться этого на данный момент.

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

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