35

tcpdumpで、自分のマシン宛てのすべての着信IPトラフィックをキャプチャするにはどうすればよいですか?私は自分の地元の交通を気にしません。

私はただ言うべきです:

tcpdump ip dst $MyIpAddress and not src net $myIpAddress/$myNetworkBytes

...または私は何かが欠けていますか?

4

3 に答える 3

26

Bashシェルでこれを試してください:

tcpdump -i eth0 tcp and dst host $MyIpAddress and not src net $MyNetworkAddress/$myNetworkBytes

またはこの同等の定式化:

tcpdump -i eth0 ip proto \\tcp and dst host $MyIpAddress and not src net $MyNetworkAddress/$myNetworkBytes

私のシステムでは、これは次のように解決されます。

tcpdump -i eth0 tcp and dst host 10.0.0.35 and not src net 10.0.0.0/24

TCPプロトコルトラフィックだけでなく、宛先ホストへのすべてのトラフィックを確認したい場合は、次のようにします。

tcpdump -i eth0 dst host $MyIpAddress and not src net $MyNetworkAddress/$myNetworkBytes

いくつかのメモ:

  1. に変更$myIpAddress/$myNetworkBytesしました$MyNetworkAddress/$myNetworkBytes。これは、ルールの明らかな目的がローカルネットワークからトラフィックを除外することであり、ネットワークアドレスを指定する正しい方法は、ネットワークの最小IPアドレス(ネットワークアドレスと呼ばれる)/ネットマスクを指定することであるためです。ネットマスクが$myNetworkBytesのネットワークの範囲内の最小アドレス以外のアドレスを指定すると、次のエラーメッセージが表示されます。

    tcpdump: non-network bits set in "10.0.0.3/24"
    
  2. 最初の例では、「tcp」はlibpcap式言語(man pcap-filter)のキーワードですが、2番目の例では、「tcp」はのとして使用されますip proto。2番目のインスタンスの「tcp」が値であり、別の「tcp」キーワードではないことを示すために、「tcp」を二重の円記号でエスケープする必要があります。Bashインタープリターが1つのバックスラッシュをlibpcapインタープリターに渡すためには、ダブルバックスラッシュである必要があります(Bashは最初のバックスラッシュを食べ、libpcapは2番目のバックスラッシュを取得します)。コマンドの式部分全体を二重引用符で囲む習慣:

    tcpdump -i eth0 "ip proto \tcp and dst host $MyIpAddress and not src net $MyNetworkAddress/$myNetworkBytes"
    
  3. 警告や驚きを避けるために、インターフェイス指定子-i eth0または任意のインターフェイスを使用することをお勧めします。すべてのインターフェースに必ずしもIPアドレスが割り当てられているわけではなく、特定されていない場合は、意図しないトラフィックが表示される可能性があります。これは、ネットワークマネージャーが実行されているシステムに特に当てはまります。ネットワークマネージャーは、どのインターフェイスをいつ追加するかについて独自の考えを持っているようです。

于 2012-04-24T15:28:30.503 に答える
24

上記のいずれも、複数のIPを持つボックスではうまく機能しません。

これは、多くのIPがバインドされているDNSサーバーで非常にうまく機能しました。

tcpdump -l -n -i pub dst port 53 and inbound

ただし、すべてのバージョンで機能するとは限りませんtcpdump

# tcpdump -V
tcpdump version 4.1-PRE-CVS_2012_03_26
libpcap version 1.4.0
于 2014-11-13T14:13:02.680 に答える
13

-Q direction --direction=directionパケットをキャプチャする送信/受信方向の方向を選択します。可能な値はin',out'と`inout'です。すべてのプラットフォームで利用できるわけではありません。

于 2017-02-15T00:52:44.867 に答える