tcpdump:只输出源地址和目标地址



问题描述:

我只想打印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) }'

试试这个:

tcpdump -i eth1 -n -c 5 ip 2>/dev/null | sed -r 's/.* ([0-9]+.[0-9]+.[0-9]+.[0-9]+).* > ([0-9]+.[0-9]+.[0-9]+.[0-9]+).*/1 > 2/'

如果从.sh脚本运行,请记住转义\1&2。

警告您必须使用无缓冲行缓冲>输出来监视另一个命令(如tcpdump)的输出。

但你的命令似乎是正确的。

为了简化,您可以:

tcpdump -i eth1 -n -c 5 ip | 
sed -une 's/^.* (([0-9]{1,3}.?){4})..* (([0-9]{1,3}.?){4})..*$/1 > 3/p'

请注意,tcpdump 上的u开关在没有-c 5的情况下使用已满

tcpdump -ni eth1 ip | 
sed -une 's/^.* (([0-9]{1,3}.?){4})..* (([0-9]{1,3}.?){4})..*$/1 > 3/p'

amp;这里有一个仅grep的解决方案:

tcpdump -l -i eth1 -n -c 5 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

注意-l,以防您不想使用-c限制数据包的数量。

相关内容

  • 没有找到相关文章

最新更新