ngrep - 反转端口结果

时间:2015-04-27 21:18:40

标签: tcpdump ngrep

我很好奇ngrep是否可以根据端口进行反向匹配?我尝试过以下几点:

ngrep -d any -v port 22
interface: any
filter: ( port 22 ) and (ip or ip6)

虽然它说过滤器是'端口22',但它没有接收任何端口。谷歌搜索了几天,并没有找到解决方案。任何熟悉ngrep的人都能告诉我这是否可行?

1 个答案:

答案 0 :(得分:1)

哇。 ngrep的命令行语法确实 是一个油腻的黑客。

ngrep手册页说:

ngrep {various flags} <match expression> <bpf filter>

没有说明ngrep如何设法告诉“匹配表达式”的哪一部分以及“bpf过滤器”的一部分。

它决定的方式是:

  • 将标志参数之后的第一个shell标记(如果存在)作为“匹配表达式”,如果之后有任何标记,则将它们与它们之间的空格粘合在一起并使其成为“bpf过滤器”; < / LI>
  • 如果找到“bpf过滤器”,尝试编译它并:
  • 如果成功,使用它所发现的“匹配表达式”和“bpf过滤器”;
  • 如果失败,假设 没有“匹配表达式”,在标志参数之后取所有标记,粘贴他们一起制作“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标志。