我正在 OpenBSD 上使用 tcpdump 并尝试从其上的底漆。
我想捕获一系列端口,但似乎完成此操作的方式已经改变。我什至在手册页中找不到 portrange 作为关键字,这也表明了这一点。
# tcpdump portrange 100-65535
tcpdump: syntax error
不是一件事:
# man tcpdump | grep portrange
#
我认为这已经改变了,或者在 OpenBSD 上有所不同。如果有人能告诉我该怎么做,因为我的第一堂课我们将学习一些实用的东西,那就太好了。如果有人告诉我有关 tcpdump 的更新底漆,那就更好了。
OpenBSD 附带了它自己的 tcpdump,这可能是一个分支,我不太确定。
答案1
portrange
OpenBSD 的 pcap-filter 中没有,但你可以伪造它。
tcpdump -i em0 tcp[2:2] > 79 and tcp[2:2] < 85
您可以对数据包的各个部分进行寻址并与它们进行比较。第一个数字是数据包中的偏移量(从零开始),第二个数字是要使用的字节数。因此,上面的示例匹配目标端口为 80 到 84 的任何 tcp 数据包。您还可以使用 <= 和 >= 使事情更直观。
与源端口匹配的是tcp[0:2]
. UDP 实际上是相同的,因为端口具有相同的偏移量。
答案2
显示过滤器由 libpcap 处理,OpenBSD 有自己的 libpcap 和 tcpdump,它们不一定会从 tcpdump.org 的 libpcap 和 tcpdump 中获取更改。
如果portrange
不起作用,对它的支持可能是 OpenBSD 没有选择的事情之一。
答案3
你man pcap-filter
不 应该使用man tcpdump
根据man pcap-filter
:
dst portrange port1-port2
True if the packet is ip/tcp, ip/udp, ip6/tcp or ip6/udp and has a destination port value between port1 and port2. port1 and port2 are interpreted
in the same fashion as the port parameter for port.
src portrange port1-port2
True if the packet has a source port value between port1 and port2.
portrange port1-port2
True if either the source or destination port of the packet is between port1 and port2.
Any of the above port or port range expressions can be prepended with the keywords, tcp or udp, as in:
tcp src port port
which matches only tcp packets whose source port is port.