gpt4 book ai didi

bash - tcpdump:只输出源地址和目的地址

转载 作者:行者123 更新时间:2023-11-29 08:56:30 24 4
gpt4 key购买 nike

问题描述:

我只想从 tcpdump[1] 中打印源地址和目标地址。

有一个可行的解决方案,但相信它可以得到很大的改进。捕获 5 个数据包的示例,就像我正在寻找的示例一样:

tcpdump -i eth1 -n -c 5 ip | \
cut -d" " -f3,5 | \
sed -e 's/^\([0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\)\..* \([0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\.[0-9]\{1,3\}\).*$/\1 > \2/'

问题:

这可以用更简单的方式完成吗?性能也是一个问题。

[1] 测试是否正确定义了 snort home_net,或者我们是否看到 home_net 中未定义的流量。


解决方案:

好的,感谢所有回复此问题的人。有两个与答案相关的问题,一个是不同 linux 版本之间的兼容性,第二个是速度。

这是我进行的速度测试的结果。首先是 grep 版本:

time tcpdump -l -r test.dmp -n ip 2>/dev/null | grep -P -o '([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+).*? > ([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)' | grep -P -o '[0-9]+\.[0-9]+\.[0-9]+\.[0-9]+' | xargs -n 2 echo >/dev/null

real 0m5.625s
user 0m0.513s
sys 0m4.305s

然后是 sed 版本:

time tcpdump -n -r test.dmp ip | sed -une 's/^.* \(\([0-9]\{1,3\}\.\?\)\{4\}\)\..* \(\([0-9]\{1,3\}\.\?\)\{4\}\)\..*$/\1 > \3/p' >/dev/null
reading from file test.dmp, link-type EN10MB (Ethernet)

real 0m0.491s
user 0m0.496s
sys 0m0.020s

最快的是 awk 版本:

time tcpdump -l -r test.dmp -n ip | awk '{ print gensub(/(.*)\..*/,"\\1","g",$3), $4, gensub(/(.*)\..*/,"\\1","g",$5) }' >/dev/null
reading from file test.dmp, link-type EN10MB (Ethernet)

real 0m0.093s
user 0m0.111s
sys 0m0.013s

不幸的是,我无法测试它们的兼容性,但由于 gensub 函数,awk 需要 gnu awk 才能工作。无论如何,所有这三个解决方案都适用于我测试过的两个平台。 :)

最佳答案

这是使用 GNU awk 的一种方法:

tcpdump -i eth1 -n -c 5 ip | awk '{ print gensub(/(.*)\..*/,"\\1","g",$3), $4, gensub(/(.*)\..*/,"\\1","g",$5) }'

关于bash - tcpdump:只输出源地址和目的地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13492611/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com