Ping TTL超出输出解码

时间:2017-03-15 18:29:21

标签: android networking ping traceroute

我正在为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

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

  2. 我想分析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;
    
  3. 使用这个,我总是收到rxBytes的值 0 ,即没有。接收的字节数。为什么会这样?我们收到超过ICMP TTL的数据包。

1 个答案:

答案 0 :(得分:1)

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

56(84)in表示ICMP消息中包含的“虚拟数据”的有效载荷是56字节,当与28字节的ICMP头数据结合使用时,它告诉消息去哪里,总数据包大小是(84)字节。