tcpdump:在复合过滤器中使用AND和OR

问题描述 投票:0回答:1

我正在尝试向tcpdump流添加过滤器。

我要运行的表达式是:

tcpdump -i eth0 -U -w - host 192.168.2.29 and (port 22222 or port 22221 or port 80)

此特定格式抛出:

bash: syntax error near unexpected token '('

我希望此方法基于THIS

以下工作不会引发错误:

a)  tcpdump -i eth0 -U -w - host 192.168.2.29
b)  tcpdump -i eth0 -U -w - port 22222

我尝试了关联的每个排列都抛出相同的错误。

filter tcpdump
1个回答
0
投票

总结评论以获得答案:

处理tcpdump表达式的最简单方法是将所有引号引起来,因为否则,在任何有特殊字符的情况下,shell都会妨碍您的操作。括号是最常见的麻烦的元字符,但还有许多其他的元字符也可以使用:[]&和其他,无论何时您优化表达式时,都必须检查自己是否没有添加危险的内容。

所以引号是简单的方法:

tcpdump -i eth0 -U -w - 'host 192.168.2.29 and (port 22222 or port 22221 or port 80)'

但是转义元字符也有效,并且直接响应OP的问题:

tcpdump -i eth0 -U -w - host 192.168.2.29 and \(port 22222 or port 22221 or port 80\)

我个人更喜欢引号。

© www.soinside.com 2019 - 2024. All rights reserved.