关于Android:Ping TTL超出输出解码器

Ping TTL exceeded output decipher

我正在为android创建一个traceroute服务,由于android没有内置traceroute命令,我正在使用adb shell ping迭代地增加ttl值来实现它。

这是请求/响应的示例:

1
2
    //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

  • 我想知道如何破译"56(84)字节的数据"。56和84是什么?

  • 我想分析traceroute使用的数据量,并使用trafficstats类进行分析:

    1
    2
    3
    4
    5
    6
    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;
  • 使用这个,我总是收到RxBytes的0值,即接收的字节数。为什么会这样?我们收到一个超过ICMP TTL的数据包。


    我找到了答案,更新以防将来有人能帮上忙:)

    中的56(84)表示包含在ICMP消息中的"虚拟数据"的有效负载为56字节,当与指示消息去向的28字节的ICMP头数据组合时,总数据包大小为(84)字节。