私はpcapパケットからデータをキャプチャしています。私のコードでは、byte []データがあり、新しいString()コンストラクタを使用してStringにデコードしたいと思います。byte []をドット付き配列に変換する正しい方法
byte[] data = payload.getByteArray(0, payload.size()); //jnetpcap, return a byte[] data
String datastr = new String(data);
Log.i("DNS PAYLOAD", datastr);
しかし、結果はスロー::
私のコードは次のようである
DNSペイロード:apisecmiuicom代わりに
:
DNSペイロード:api.sec.miui.com
私はすべての未知数「」文字を置換し、上記のようなリンクを取得する必要があります。どんな服薬?
PD:Array.toString(データ)を用い、これをスロー:
[-32、-51、1、0、0、1、0、0、0、0、0、0、 0,0,28,0,1]
この発明と関係が強いastamuse(アスタミューゼ)は機能、素材、産業等様々な点から検索、比較・検討することが出来ます! PD2:ペイロードの文字列データ(payload.toString())のようになります。
Data: ******* Payload offset=42 (0x2A) length=107
Data:
002a: ab 7f 81 80 00 01 00 00 00 01 00 00 02 65 31 08 .............e1.
003a: 77 68 61 74 73 61 70 70 03 6e 65 74 00 00 1c 00 whatsapp.net....
004a: 01 c0 0f 00 06 00 01 00 00 00 e2 00 3e 03 6e 73 ............>.ns
005a: 31 03 70 31 33 06 64 79 6e 65 63 74 c0 18 0a 68 1.p13.dynect...h
006a: 6f 73 74 6d 61 73 74 65 72 08 77 68 61 74 73 61 ostmaster.whatsa
007a: 70 70 03 63 6f 6d 00 78 3a 61 3e 00 00 0e 10 00 pp.com.x:a>.....
008a: 00 02 58 00 09 3a 80 00 00 07 08 ..X..:.....
そして、それは、トランスポートプロトコルUDPから抽出しています、ポート53
これは、文字列エンコーディングについての質問です。あなたの '新しいString(data)'は、あなたのJVMプラットフォーム(おそらくUTF-8)のデフォルトのエンコーディングとしてバイトを解釈します。これは明らかにここでは動作しません。これは、生パケットのどの部分を読み込もうとしているのか、そしてどのプロトコルがペイロードのエンコーディングを制御しているかによって、非常に恣意的である可能性があるので、より多くのコンテキストが必要です。 –