Ping TTL 超出输出解密

Ping TTL exceeded output decipher

我正在为 Android 创建一个 traceroute 服务,由于 Android 没有内置的 traceroute 命令,我正在使用 adb shell ping 迭代实现一个随着 TTL 值的增加。

这是 request/response 的示例:

    //Sample shellCommand: /system/bin/ping -c 1 -t 8
    Runtime.getRuntime().exec(shellCommand + DESTINATION_URL);

PING opf-www.google.com (xxx.xxx.xxx.xxx) 56(84) bytes of data.
--- opf-www.google.com ping statistics ---
1 packets transmitted, 0 received, 100% packet loss, time 0ms

  1. 我想知道如何破译“56(84) 字节数据”。这里的56和84是什么?

  2. 我想分析 traceroute 使用的数据量,我正在使用 TrafficStats class 这样做:

    int UID = myUid();
    long mStartRX = TrafficStats.getUidRxBytes(UID);
    long mStartTX = TrafficStats.getUidTxBytes(UID);
    new TracerouteTask().run();
    long rxBytes = TrafficStats.getUidRxBytes(UID)- mStartRX;
    long txBytes = TrafficStats.getUidTxBytes(UID)- mStartTX;
    

使用这个,我总是收到 0 的 rxBytes 值,即没有。收到的字节数。为什么会这样?我们收到一个 ICMP TTL 超出数据包。

我找到了答案,正在更新以防将来对某人有帮助:)

56(84)in 表示 ICMP 消息中包含的 "dummy data" 的有效载荷是 56 字节,当与 ICMP header 数据的 28 字节组合时,告诉消息去哪里go,总数据包大小为 (84) 字节。