Wireshark十六进制转储分析器可以用Java做什么?

时间:2014-04-11 07:45:32

标签: java hex wireshark

我有一个pcap文件,我可以使用wireshark查看十六进制和人类可读的字符串相当于hexdump。但是,我想在Java中做同样的事情。这是Wireshark应用程序的截图。

enter image description here

采用突出显示的字符串,这是我来的,但输出不是我所期望的。有人能帮我吗?非常感谢你

    String hex = "a106020110020138";
    byte[] bts = new byte[hex.length() / 2];
    for (int i = 0; i < bts.length; i++) {
      bts[i] = (byte) Integer.parseInt(hex.substring(2 * i, 2 * i + 2), 16);
    }  
    String c = new String(bts, StandardCharsets.US_ASCII);
    System.out.println(c);

这是输出:

enter image description here

2 个答案:

答案 0 :(得分:0)

Java使用UTF-16表示字符,按照我忘记的字节顺序,这意味着每个字符需要使用两个字节。

答案 1 :(得分:0)

如果您希望输出看起来与Wireshark完全相同,则可以通过读取每组两个十六进制数字,并保留与可打印ASCII字符对应的数字:

public class Pcap {
    public static void main(String[] args) {
        String hex = "701c2f676c08a106020110020138";

        int n = hex.length();
        char[] cs = new char[n / 2];

        for (int i = 0; i < n; i+=2)
            cs[i/2] = (char) Integer.parseInt(hex.substring(i, i+2), 16);

        for (int i = 0; i < cs.length; i++)
            if (cs[i] < ' ' || cs[i] > '~') // printable ASCII
                cs[i] = '.';

        System.out.println(new String(cs));

    }
}

输出

p./gl........8

然而,我的猜测是你最好使用一个可以解析pcaps的库(我之前提到过,看起来http://jpcap.sourceforge.net也可能有效),因为只是首先得到那个十六进制字符串需要打开Wireshark。您可以自己编写代码以从(二进制)pcap文件中提取这些值,但是已经存在项目来执行此操作。