我正在寻找一个可以从traceroute中提取具有最高延迟跳跃的行的脚本。理想情况下,它会逐行查看3个值的最大值或平均值。我怎么能这样呢?
这是我到目前为止所尝试的:
traceroute www.google.com | awk '{printf "%s\t%s\n", $2, $3+$4+$5; }' | sort -rgk2 | head -n1
traceroute -w10 www.google.com | awk '{printf "%s\t%s\n", $2, ($3+$4+$5)/3; }' | sort -rgk2 | head -n1
这似乎是朝着正确方向迈出的一步,除了从traceroute返回的一些值是*,因此总和和平均值都提供了错误的值。
更新 更进了一步:
traceroute www.cnn.com | awk '{count = 0;sum = 0;for (i=3; i<6; i++){ if ($i != "*") {sum += $i;count++;}}; printf "%s\t%s\t%s\t%s\n", $2, count, sum, sum/count }' | sort -rgk2
如果我没有列4,5,现在需要拦截。有时traceroute只提供这样的3颗星:
17 207.88.13.153 235.649ms 234.864ms 239.316ms
18 * * *
答案 0 :(得分:5)
你必须
答案 1 :(得分:1)
我需要一段时间才能跑步,所以你需要一些耐心。它将显示吞吐量,并且比确定瓶颈的延迟要好得多。
http://www.caida.org/tools/taxonomy/perftaxonomy.xml
以下是一个例子:
rayd@raydHPEliteBook8440p ~ sudo pchar anddroiddevs.com
pchar to anddroiddevs.com (31.221.38.104) using UDP/IPv4
Using raw socket input
Packet size increments from 32 to 1500 by 32
46 test(s) per repetition
32 repetition(s) per hop
0: 192.168.0.20 (raydHPEliteBook8440p.local)
Partial loss: 0 / 1472 (0%)
Partial char: rtt = 6.553065 ms, (b = 0.000913 ms/B), r2 = 0.241811
stddev rtt = 0.196989, stddev b = 0.000244
Partial queueing: avg = 0.012648 ms (13848 bytes)
Hop char: rtt = 6.553065 ms, bw = 8759.575088 Kbps
Hop queueing: avg = 0.012648 ms (13848 bytes)
1: 80.5.69.1 (cpc2-glfd6-2-0-gw.6-2.cable.virginm.net)
答案 2 :(得分:1)
尝试:
$ traceroute 8.8.8.8 | awk ' BEGIN { FPAT="[0-9]+\\.[0-9]{3} ms" }
/[\\* ]{3}/ {next}
NR>1 {
for (i=1;i<4;i++) {gsub("*","5000.00 ms",$i)}
av = (gensub(" ms","",1,$1) + gensub(" ms","",1,$2) + gensub(" ms","",1,$3))/3
if (av > worst) {
ln = $0
worst = av
}
}
ND { print "Highest:", ln, " Average:", worst, "ms"}'
给出:
Highest: 6 72.14.242.166 (72.14.242.166) 7.383 ms 72.14.232.134 (72.14.232.134) 7.865 ms 7.768 ms Average: 7.672 ms
如果有三个asterix(asteri?)* * *
,则脚本假定跳不响应IGMP响应并完全忽略它。如果一行中有一个或两个*
,则为它们提供5.0秒的值。
答案 3 :(得分:0)
使用mtr --raw -c 1 google.com
。它更快速,更容易解析。