防止 ping 输出显示(截断)而不是时间=

防止 ping 输出显示(截断)而不是时间=

防止显示 ping 输出,(truncated)而不是time=##.# ms

输出格式不理想的问题显然是由于我正在运行的测试:根据数据包大小确定数据包丢失阈值。我的问题是,我如何才能查看时间(而不是“截断”)?

所需输出格式:

用户@桌面:~$ ping -c 10 -s 1372 -v hostname.com
PING hostname.com (XXXX) 1372(1400) 字节的数据。
来自 hostname.com (XXXX) 的 1380 字节:icmp_req=1 ttl=242 时间=82.8 毫秒
来自 hostname.com (XXXX) 的 1380 字节:icmp_req=2 ttl=242 时间=82.7 毫秒

--- hostname.com ping 统计信息 ---
发送 2 个数据包,接收 2 个数据包,0% 数据包丢失,时间 1001 毫秒
rtt 最小值/平均值/最大值/mdev = 82.826/83.038/83.250/0.212 毫秒

不需要的输出格式:

用户@桌面:~$ ping -c 10 -s 1373 -v hostname.com
PING hostname.com (XXXX) 1373(1401) 字节数据。
来自 hostname.com (XXXX) 的 1376 字节:icmp_req=1 ttl=242(截断)
来自 hostname.com (XXXX) 的 1376 字节:icmp_req=2 ttl=242(截断)

--- hostname.com ping 统计信息 ---
发送 2 个数据包,接收 2 个数据包,0% 数据包丢失,时间 1000 毫秒
rtt 最小值/平均值/最大值/mdev = 82.997/83.010/83.023/0.013 毫秒

为了完整性,还显示间歇性错误。

用户@桌面:~$ ping -c 2 -s 1373 -v hostname.com
PING hostname.com (XXXX) 1373(1401) 字节数据。
来自 hostname2.com (YYYY) icmp_seq=1 需要 Frag 并设置 DF (mtu = 1400)
来自 hostname.com (XXXX) 的 1376 字节:icmp_req=2 ttl=242(截断)

--- hostname.com ping 统计信息 ---
已发送 2 个数据包,已接收 1 个数据包,+1 个错误,50% 数据包丢失,时间 999 毫秒
rtt 最小值/平均值/最大值/mdev = 82.937/82.937/82.937/0.000 毫秒

答案1

我认为这是不可能的。

鉴于我读过ping 源代码如果返回的数据大小小于发送的数据大小,它将始终打印该大小。

我的猜测是由于数据被截断,因此该时间被视为无效或无用。

澄清一下:上面链接的条件是

if (cc < datalen+8) {

cc表示收到的字节数,datalen是您通过选项提供的数字-s。因此,这是检查回复的大小是否小于发送的大小(第二个示例中为 1373)。

我刚刚注意到的另一件事是,计时是在检测截断数据的块之后的下一个块中计算的。在打印文本的行之后(truncated),函数返回,因此计时块永远不会运行。

这不是真正解决您问题的答案,而是解释为什么无法做到这一点。
如何不显示的答案(truncated)是:使远程主机不截断数据包。

相关内容