读取/ proc / net / tcp并从String获取IP地址

时间:2017-10-22 17:48:30

标签: java android

我正在阅读proc/net/tcp中的filereader文件并解析regex中的数据以获得所需内容。

来自proc/net/tcp的示例字符串是:

0: 0401A8C0:D366 FFB79E23:01BB 01 00000000:00000000 00:00000000 00000000 11269 0 14392479 1 00000000 30 4 30 10 -1

所以local addressport是:0401A8C0:D366,我尝试通过该方法将十六进制转换为字符串,但它不返回有效数据....有人可以帮助读数据?

应该提供类似的内容:192.168.*.*

解析ip地址应该从这个0401A8C0 Little Endian字符串获取bytearray,但无法解决

The Hex to String method :

public String fromHex(String hex) throws UnsupportedEncodingException {
    hex = hex.replaceAll("^(00)+", "");
    byte[] bytes = new byte[hex.length() / 2];
    for (int i = 0; i < hex.length(); i += 2) {
        bytes[i / 2] = (byte) ((Character.digit(hex.charAt(i), 16) << 4) + Character.digit(hex.charAt(i + 1), 16));
    }
    return new String(bytes);
}

1 个答案:

答案 0 :(得分:0)

我通过将字符串:0401A8C0转换为字节数组来解决它:

public static byte[] hexStringToByteArray(String s) {
    int len = s.length();
    byte[] data = new byte[len / 2];
    for (int i = 0; i < len; i += 2) {
        data[i / 2] = (byte) ((Character.digit(s.charAt(i), 16) << 4)
                + Character.digit(s.charAt(i+1), 16));
    }
    return data;
}

而不是通过以下方式获取IP地址:

InetAddress addresses = InetAddresses.fromLittleEndianByteArray(byte[]);