0

私はjpcapライブラリの助けを借りてJavaでイーサネット(eth0)上のパケットを盗聴しています...だから、私のプロジェクトにはJpcapCaptorがあります...

    //Open an interface with openDevice(NetworkInterface intrface, int snaplen, boolean promics, int to_ms)
        JpcapCaptor captor=JpcapCaptor.openDevice(devices[index], 65535, false, 20);
        captor.setFilter("icmp", true);
        captor.loopPacket(-1, new PacketPrinter()); 

次に、盗聴されたパケットの本体を印刷するパケットプリンターがあります...

    public class PacketPrinter implements PacketReceiver {
@Override
public void receivePacket(Packet packet) {
    InputStream is = new ByteArrayInputStream(packet.data);
    try {
        String sstr = IOUtils.toString(is, "UTF-8");
        System.out.println("STRING " + sstr);
    } catch (IOException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }
       String ss;
    try {
        ss = new String(packet.data, "UTF-8");
        System.out.println("STRING " + ss);
    } catch (UnsupportedEncodingException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } 
} 

しかし、問題があります... packet.dataはバイト[]です...そして、コンソールはそれを次のように出力します

    STRING W�xQ��       !"#$%&'()*+,-./01234567
    STRING W�xQ��       !"#$%&'()*+,-./01234567
    STRING W�xQ��       !"#$%&'()*+,-./01234567 

私が理解しているように、それはエンコーディングの問題が原因ですか??? この問題を解決するための解決策は何ですか?

4

1 に答える 1

1

私が理解しているように、それはエンコーディングの問題が原因ですか?

それは正しいかもしれません。また、文字列に変換しようとしているものがテキストではない可能性もあります。実際、それが盗聴した生のネットワーク パケットである場合、一部のパケット (IP/ICMP パケット ヘッダー)がテキストではないことがほぼ保証されます。

この問題の解決策は何ですか?

解決策は、何をデコードしようとしているのか、そしてそれをエンコードされたテキストであるかのようにデコードすることが適切かどうかを理解することです。そうでない場合は、表示しようとしているパケットについて関連するRFCが何を言っているかに応じて、別の方法でデコード/表示する必要があります。

于 2013-04-25T05:31:28.993 に答える