我正在尝试向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
我尝试了关联的每个排列都抛出相同的错误。
总结评论以获得答案:
处理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\)
我个人更喜欢引号。