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)字节。