我很好奇ngrep是否可以根据端口进行反向匹配?我尝试过以下几点:
ngrep -d any -v port 22
interface: any
filter: ( port 22 ) and (ip or ip6)
虽然它说过滤器是'端口22',但它没有接收任何端口。谷歌搜索了几天,并没有找到解决方案。任何熟悉ngrep的人都能告诉我这是否可行?
答案 0 :(得分:1)
哇。 ngrep的命令行语法确实 是一个油腻的黑客。
ngrep手册页说:
ngrep {various flags} <match expression> <bpf filter>
没有说明ngrep如何设法告诉“匹配表达式”的哪一部分以及“bpf过滤器”的一部分。
它决定的方式是:
这意味着如果你执行ngrep port 22
,它首先尝试使用“port”作为“匹配表达式”而使用“22”作为“bpf过滤器”,因为“22”不是有效的BPF过滤器,然后假设不是“匹配表达式”,并且“端口22”是“bpf过滤器”,它可以工作。
但是,如果你ngrep not port 22
,它首先尝试使用“not”作为“匹配表达式”,使用“port 22”作为“bpf过滤器”,成功,所以你最终得到的是“not”作为它尝试grepping的过滤器,“port 22”作为BPF过滤器交给libpcap。
可悲的是,ngrep 没有办法说“没有匹配表达式,只有一个BPF过滤器”,所以你必须做一些像ngrep "" not port 22
那样的空匹配表达式让它识别“不是端口22”作为BPF过滤器。
因此,如果您希望查看除以外的所有流量到达端口22的流量,请尝试
ngrep -d any "" not port 22
-v
会影响匹配表达式 NOT BPF过滤器;这意味着您在问题中提供的命令将匹配仅数据包进出端口22,而不是数据包而不是进出端口22。如您所希望的空匹配表达式匹配所有数据包,而不是 no 数据包,您将保留-v
标志。