【问题标题】:Reading an ssid from pcap file using jnetpcap使用 jnetpcap 从 pcap 文件中读取 ssid
【发布时间】:2016-02-15 00:13:34
【问题描述】:

所以我有一个 pcap 文件,当我在 Wireshark 中打开这个文件时,我看到了许多标记参数,其中一个是我想简单地在屏幕上打印出来的 ssid。

我做了以下事情:

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 视为一个字符串,但它似乎没有正确解码,理想情况下,我希望能够检索我在 wireshark 中看到的所有标记参数。

唉,我不知道如何实现这一点,有没有人能让我走上正轨?

【问题讨论】:

    标签: java packet pcap jnetpcap


    【解决方案1】:

    什么没有被正确解码?你期待什么,你看到了什么? 参数不会以任何方式“标记”。他们只是有一些专用的字节。你只需要知道去哪里找。

    让我向您展示我的旧 jnetpcap 代码示例。现在,由于您熟悉 jnetpcap,而我无法真正理解问题所在,我只是向您展示代码的 sn-p,猜测您会掌握它的窍门。

    下面的代码是我对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");
            }
    

    如果无论如何这对您没有帮助,我可以尝试发布一个完整的示例。但是因为这可能有点过头了,所以我暂时坚持下去。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-12-07
      • 2013-05-27
      • 1970-01-01
      • 2017-08-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多