从traceroute命令解析数据(Parsing data from traceroute com

2019-07-30 19:37发布

我试图从分析值“的跳数” traceroute命令,并将其输出与一个bash脚本。

任何提示? 非常新,所以感谢。

我的剧本是这样的,到目前为止:

#!/bin/bash
#parse traceroute for hops and output to stdout.
echo -n "Enter a host name(like www.google.com):  "
read hostname
traceroute 2>&1 $hostname|grep "hops"
echo "number of hops are "

Answer 1:

您是否正在寻找花跳数,还是“64个跳MAX”的价值? 如果是前者,用tail来获得输出的最后一行,则awk打印的第一列:

traceroute "$hostname" 2>/dev/null | tail -1 | awk '{print $1}'


Answer 2:

在跟踪路由输出“跳”(错误,实际上)的唯一发生是朝向顶部,于stderr“头”行:

traceroute to foo.bar.com (123.12.1.23), 30 hops max, 40 byte packets

或类似-如果这是你想抓住一条线,你可以用grep的"hops max,"之类,以减少不需要的命中风险(应该有的中间宿主恰好有“跳”在他们的DNS)。

你是这个意思吗? 是你的问题抓住跳这个30,最大数量,成一个bash变量? 如果真是这样,那么

maxhops=`traceroute www.yahoo.com 2>&1 >/dev/null | grep "hops max" | cut -d' ' -f5`

应该帮助-您可以使用$maxhops (在上面的例子中,这将是30),在此之后。

但我怀疑你的意思是完全不同的东西 - 澄清,也许...?

编辑 :OP澄清了他们想要的,不是maxhops,而是通过路由跟踪测量啤酒花的实际数量; 为了这个目的,

numhops=`traceroute www.yahoo.com 2>/dev/null | tail -1 | cut -d' ' -f2`

或者更简单

numhops=`traceroute www.yahoo.com | wc -l`

应该正常工作!

如果你想什么票友(或不止一个结果,等等),那么AWK在其他的答案建议是完全没有问题的,但grep的,尾巴,切割的管道结构,是一个相当传统的UNIX-Y的做法,还是相当可行的简单的情况下(和一些复杂的,但AWK或Perl可能更适合那些 ;-)。



Answer 3:

traceroute www.google.com 2>/dev/null | awk 'NR==1{print $5;exit}'


Answer 4:

另一种方式,在不可达的(因为缺乏更好的词)的跳不计

# traceroute www.yahoo.com 2>/dev/null | awk 'NR>1 && !/* * */{c++}END{print c}'
  16


文章来源: Parsing data from traceroute command