首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >简化`tcpdump`输出

简化`tcpdump`输出
EN

Stack Overflow用户
提问于 2018-06-13 12:09:55
回答 2查看 208关注 0票数 0

我想转换这个tcpdump输出:

代码语言:javascript
复制
IP 10.10.10.1 > 20.20.20.1: ICMP echo request, id 8312, seq 0, length 64
IP 10.10.10.1.17441 > 20.20.20.1.22: Flags [S], seq 3936449810, win 65535, options [mss 1460,nop,wscale 6,sackOK,TS[|tcp]>

至:

代码语言:javascript
复制
IP 10.10.10.1 > 20.20.20.1: ICMP
IP 10.10.10.1.17441 > 20.20.20.1.22: tcp

我使用cut命令试图用shell脚本来隐藏它们,但我做不到。

谢谢大家的帮助。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-06-13 21:12:35

使用awk (或GNU gawk),将字段分隔符FS设置为":“,并假设转储位于test.txt中:

代码语言:javascript
复制
gawk 'BEGIN{ FS=":" } { if($0 ~ / ICMP /){ print $1 ": ICMP" }else if($0 ~ /tcp[]]>/){ print $1 ": tcp" } }' test.txt

预期结果:

代码语言:javascript
复制
IP 10.10.10.1 > 20.20.20.1: ICMP
IP 10.10.10.1.17441 > 20.20.20.1.22: tcp

tcpdump输出可以通过管道传输到gawk,如

代码语言:javascript
复制
tcpdump <options> | gawk ' ... '
票数 1
EN

Stack Overflow用户

发布于 2018-06-13 16:22:14

严格来说,这是一个cut方法。它假设您的输出将始终是这种格式。如前所述,sed (或awk)版本可能更动态。

其主要部分是-d (定界符)参数和-f (字段)参数。-f可以指定由指定分隔符分隔的单个字段或字段范围(我认为选项卡是默认的)。

如果您的输出位于一个名为output.txt的文件中,您可以使用这个小脚本。

代码语言:javascript
复制
line1="$(head -1 output.txt | cut -d ' ' -f1-5)"
line2="$(tail -1 output.txt | cut -d ' ' -f1-4) $(tail -1 output.txt | cut -d '|' -f2 | cut -d "]" -f1)"

echo "$line1"
echo "$line2"

如果您的输出存储在一个名为output的变量中,则可以将此脚本与作为像./script.sh "$output"这样的参数发送的变量一起使用。

代码语言:javascript
复制
arg="$1"
line1="$(echo "$arg" | head -1 | cut -d ' ' -f1-5)"
line2="$(echo "$arg" | tail -1 | cut -d ' ' -f1-4) $(echo "$arg" | tail -1 | cut -d '|' -f2 | cut -d "]" -f1)"

echo "$line1"
echo "$line2"

输出:

代码语言:javascript
复制
IP 10.10.10.1 > 20.20.20.1: ICMP
IP 10.10.10.1.17441 > 20.20.20.1.22: tcp
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50836933

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档