0

だから私はpcapファイルを持っています。このファイルをwiresharkで開くと、タグ付けされたパラメーターがいくつか表示されます。そのうちの1つは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 で表示されるタグ付きパラメーターをすべて取得できるようにしたいと考えています。

残念ながら、これを達成する方法がわかりません。誰かが私を正しい軌道に乗せることができますか?

4

1 に答える 1

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");
        }

とにかくこれが役に立たない場合は、完全な例を投稿してみることができます。でもそれはやり過ぎかもしれないので、とりあえずこれで我慢します。

于 2016-01-28T12:59:34.393 に答える