我正在为Android创建一个traceroute服务,并且由于Android没有内置的traceroute命令,我正在实现一个使用adb shell ping迭代地增加TTL值。
这是请求/响应的示例:
//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)字节数据。
--- opf-www.google.com ping统计---
发送1个包,0个接收,100%丢包,时间0ms
我想知道如何破译“ 56(84)字节的数据”。这里56和84是什么?
我想分析traceroute使用的数据量,并使用TrafficStats类来执行此操作:
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的数据包。
答案 0 :(得分:1)
我找到了答案,更新以防将来有人帮助:)
56(84)in表示ICMP消息中包含的“虚拟数据”的有效载荷是56字节,当与28字节的ICMP头数据结合使用时,它告诉消息去哪里,总数据包大小是(84)字节。