我在OpenBSD上有以下输出:
# hPing --icmp-ts www.openbsd.org HPing www.openbsd.org (re0 129.128.5.194): icmp mode set,28 headers + 0 data bytes len=46 ip=129.128.5.194 ttl=237 ID=23807 icmp_seq=0 rtt=155.3 ms ICMP timestamp: Originate=22085077 Receive=22085171 Transmit=22085171 ICMP timestamp RTT tsrtt=156 len=46 ip=129.128.5.194 ttl=237 ID=4150 icmp_seq=1 rtt=154.8 ms ICMP timestamp: Originate=22086078 Receive=22086171 Transmit=22086171 ICMP timestamp RTT tsrtt=155 ^C --- www.openbsd.org hPing statistic --- 2 packets tramitted,2 packets received,0% packet loss round-trip min/avg/max = 154.8/155.0/155.3 ms
我需要一些额外的algorithm来解决非对称路由问题 ,如某些BUG报告中的补丁所示 ,但是我不想重新编译软件。
TL; DR,这两个新的字段被计算为Receive − Originate Originate + tsrtt − Transmit和Originate + tsrtt − Transmit ,导致类似于下面的内容(不必跨越4行)。
len=46 ip=129.128.5.194 ttl=237 ID=23807 icmp_seq=0 rtt=155.3 ms ICMP timestamp: Originate=22085077 Receive=22085171 Transmit=22085171 ICMP timestamp RTT tsrtt=156 src->dst=94 dst->src=62
我如何用awk做到这一点? (我也可以用任何其他的* BSD工具。)
BASH:grep / awk / sed提取variables数据
Awk结合和while循环algorithm
AWK根据从第二个文件中select的标题从文件中提取列
linux:sed命令如何过滤除第一个和最后一个以外的所有字段?
从UTC转换到时代shell脚本或awk
如果其他列的AWK写入到新列的基础上
如何使用awk在多个文件中查找共同的行
sed,awk.grep – 如果该行尚不存在,则在configuration节的末尾添加一行
linux Shell,Awk:按列合并2个可变数据
如何用AWKselect一些列?
使用Perl,你可以做这样的事情:
#!/usr/bin/perl -n # if (/Originate=(d+) Receive=(d+) Transmit=(d+)/) { ($o,$r,$t) = ($1,$2,$3); } elsif (/tsrtt=(d+)/) { print $r - $o," ",$o + $1 - $t,"n"; }
如果你调用这个icmpstats.pl ,你可以使用hPing | perl icmpstats.pl hPing | perl icmpstats.pl 。
从janos修改解决方案,提供一个可用的代码片段。
请注意,当重定向到管道时,hPing的输出将被完全缓冲,这令人惊讶地严重抑制了解决方案的可移植性。 请参阅https://unix.stackexchange.com/questions/25372/turn-off-buffering-in-pipe和https://unix.stackexchange.com/questions/102403/turn-off-buffering-for-hPing-in -openbsd 。
在安装expect软件包之后,以下工作在OpenBSD上:
unbuffer hPing --icmp-ts ntp1.yycix.ca | perl -ne 'if (/icmp_seq=(d+) rtt=(d+.d)/) {($s,$p) = ($1,$2);} if (/ate=(d+) Receive=(d+) Transmit=(d+)/) {($o,$3);} if (/tsrtt=(d+)/) { print $s,"t",$p,$1," = ",$r - $o," + ","n"; }'
以下是在OS X上需要的,因为它的expect是不伴随unbuffer :
script -q /dev/null hPing3 --icmp-ts ntp1.yycix.ca | perl -ne 'if (/icmp_seq=(d+) rtt=(d+.d)/) {($s,"rn"; }'
这是脚本的一个输出示例,它显示正向路径拥塞,返回路径很可能不是:
0 145.5 146 = 75 + 71 1 142.7 142 = 72 + 70 2 140.7 140 = 70 + 70 3 146.7 146 = 76 + 70 4 148.3 148 = 77 + 71 5 157.5 157 = 87 + 70 6 167.1 167 = 96 + 71 7 166.3 166 = 95 + 71 8 167.7 167 = 97 + 70 9 159.0 159 = 88 + 71 10 156.7 156 = 86 + 70 11 154.9 155 = 84 + 71 12 151.9 152 = 81 + 71 13 157.3 157 = 86 + 71 14 155.0 155 = 84 + 71 15 157.7 158 = 87 + 71 16 156.6 156 = 86 + 70 17 157.8 158 = 87 + 71 18 161.9 162 = 91 + 71 19 160.1 160 = 89 + 71 20 166.3 166 = 95 + 71 21 163.9 164 = 93 + 71 22 172.0 172 = 101 + 71 23 177.9 178 = 107 + 71 24 177.0 177 = 106 + 71 25 172.1 172 = 101 + 71 26 167.4 167 = 97 + 70 27 167.1 167 = 96 + 71 28 161.0 161 = 90 + 71 29 150.5 150 = 80 + 70 30 155.6 155 = 85 + 70 31 162.0 162 = 91 + 71 32 154.3 154 = 84 + 70
请注意,如果时钟不同步,那么您将会出现负面情况,但仍然可以很好地指示哪一方正在经历拥堵。
下面的例子是通过相同的路径; 注意一个值如何随机地上下移动,而另一个值是单调变化的。
0 165.9 166 = -142113 + 142279 1 160.2 160 = -142118 + 142278 2 155.2 155 = -142122 + 142277 3 156.5 156 = -142121 + 142277 4 164.7 165 = -142112 + 142277 5 164.4 164 = -142111 + 142275 6 160.9 161 = -142114 + 142275 7 158.1 158 = -142117 + 142275 8 155.6 156 = -142119 + 142275 9 143.0 143 = -142131 + 142274 10 153.2 153 = -142120 + 142273 11 157.1 157 = -142115 + 142272 12 158.3 158 = -142114 + 142272 13 148.6 149 = -142123 + 142272 14 144.3 144 = -142127 + 142271 15 145.3 145 = -142125 + 142270 16 141.9 142 = -142128 + 142270
总结以上是内存溢出为你收集整理的awk:hping:打印icmp发起/接收之间的区别全部内容,希望文章能够帮你解决awk:hping:打印icmp发起/接收之间的区别所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)