ドキュメントに記載されているようにポート範囲を指定すると、tcpdump 構文エラーが発生します。

ドキュメントに記載されているようにポート範囲を指定すると、tcpdump 構文エラーが発生します。

私はOpenBSDでtcpdumpを使っていて、それについての入門書

ポートの範囲をキャプチャしたいのですが、その方法が変わったようです。マニュアル ページでも、これを示唆するキーワードとして portrange を見つけることができません。

# tcpdump portrange 100-65535 
tcpdump: syntax error

何もないよ:

# man tcpdump | grep portrange
# 

これは変更されたか、OpenBSD では異なると思います。最初のレッスンでは実用的な内容を扱う予定なので、これについてどうすればよいか教えていただけるとありがたいです。tcpdump の更新された入門書について教えていただけるとさらにうれしいです。

OpenBSD には独自の tcpdump が付属していますが、これはフォークである可能性がありますが、よくわかりません。

答え1

portrangeOpenBSD の pcap-filter にはありませんが、偽装することは可能です。

tcpdump -i em0 tcp[2:2] > 79 and tcp[2:2] < 85

パケットの一部をアドレス指定して比較することができます。最初の数字はパケット内のオフセット (0 から始まる) で、2 番目の数字は使用するバイト数です。したがって、上記の例は、宛先ポートが 80 から 84 の任意の TCP パケットに一致します。<= と >= を使用して、より直感的に操作することもできます。

送信元ポートとのマッチングは次のようになりますtcp[0:2]。ポートは同じオフセットにあるため、UDP は実際には同じになります。

答え2

ディスプレイ フィルターは libpcap によって処理されますが、OpenBSD には独自の libpcap と tcpdump があり、必ずしも tcpdump.org の libpcap と tcpdump からの変更が反映されるわけではありません。

動作しない場合はportrange、そのサポートが OpenBSD で採用されなかったものの 1 つである可能性があります。

答え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.

関連情報