tcpdumpはどのレベルのネットワークスタックから情報を取得しますか?


12

ここで障害のあるイーサネットコントローラーを修正するために無駄にしようとしていたので、マシンでtcpdumpを実行してみました。

tcpdumpは、pingアプリケーションが送信していると考えていたICMPパケットの一部が、同じマシン上で実行されていても、実際にはワイヤ上で送信されていなかったことを検出できることは興味深いことに気付きました。これらのtcpdumpの結果をここに再現しました。

14:25:01.162331 IP debian.local > 74.125.224.80: ICMP echo request, id 2334, seq 1, length 64
14:25:02.168630 IP debian.local > 74.125.224.80: ICMP echo request, id 2334, seq 2, length 64
14:25:02.228192 IP 74.125.224.80 > debian.local: ICMP echo reply, id 2334, seq 2, length 64
14:25:07.236359 IP debian.local > 74.125.224.80: ICMP echo request, id 2334, seq 3, length 64
14:25:07.259431 IP 74.125.224.80 > debian.local: ICMP echo reply, id 2334, seq 3, length 64
14:25:31.307707 IP debian.local > 74.125.224.80: ICMP echo request, id 2334, seq 9, length 64
14:25:32.316628 IP debian.local > 74.125.224.80: ICMP echo request, id 2334, seq 10, length 64
14:25:33.324623 IP debian.local > 74.125.224.80: ICMP echo request, id 2334, seq 11, length 64
14:25:33.349896 IP 74.125.224.80 > debian.local: ICMP echo reply, id 2334, seq 11, length 64
14:25:43.368625 IP debian.local > 74.125.224.80: ICMP echo request, id 2334, seq 17, length 64
14:25:43.394590 IP 74.125.224.80 > debian.local: ICMP echo reply, id 2334, seq 17, length 64
14:26:18.518391 IP debian.local > 74.125.224.80: ICMP echo request, id 2334, seq 30, length 64
14:26:18.537866 IP 74.125.224.80 > debian.local: ICMP echo reply, id 2334, seq 30, length 64
14:26:19.519554 IP debian.local > 74.125.224.80: ICMP echo request, id 2334, seq 31, length 64
14:26:20.518588 IP debian.local > 74.125.224.80: ICMP echo request, id 2334, seq 32, length 64
14:26:21.518559 IP debian.local > 74.125.224.80: ICMP echo request, id 2334, seq 33, length 64
14:26:21.538623 IP 74.125.224.80 > debian.local: ICMP echo reply, id 2334, seq 33, length 64
14:26:37.573641 IP debian.local > 74.125.224.80: ICMP echo request, id 2334, seq 35, length 64
14:26:38.580648 IP debian.local > 74.125.224.80: ICMP echo request, id 2334, seq 36, length 64
14:26:38.602195 IP 74.125.224.80 > debian.local: ICMP echo reply, id 2334, seq 36, length 64

seq番号が数回ジャンプすることに注意してください...これは、pingアプリケーションが実際にボックスを出ていないパケットを示します。

それは私の質問に私をもたらします:tcpdumpはどのようにICMPパケットが実際に出ていなかったことを検出できましたか?どういうわけか、ワイヤ上にあるものを直接監視できますか?

これが実現する場合は、カーネルの一部とインターフェイスし、ネットワークコントローラーの標準部分であるハードウェアとインターフェイスすることによるものと想定しています。

それでも、それはかなりクールです!それが実際にtcpdumpが機能する方法ではない場合、誰かがソフトウェアで欠落パケットをどのように検出したかを説明できますか?

回答:


13

はい。ネットワークインターフェースを無差別モードにすることにより、tcpdumpはネットワークインターフェースで出入りする(および入っている)ものを正確に確認できます。

tcpdumpはlayer2 +で動作します。イーサネット、FDDI、PPP&SLIP、トークンリング、およびtcpdumpのすべての面倒な処理を行うlibpcapでサポートされる他のプロトコルを調べるために使用できます。

tcpdump(libpcap経由)が分析できるレイヤー2プロトコルの完全なリストについては、pcapのマニュアルページのpcap_datalink()セクションをご覧ください

tcpdumpのマニュアルページを読むと、tcpdumpとlibpcapがカーネルお​​よびネットワークインターフェースとどのように生データリンクレイヤーフレームを読み取ることができるかを正確に理解できます。


1
ありがとう、ティム。1つは、tcpdumpのマニュアルページを見て、カーネル/ネットワークインターフェイスについて何も表示されなかったことです。他のポインタがあれば、これについてもっと知りたいです。
エリック

上記でリンクしたpcapのマニュアルページでは、ネットワークインターフェイスについて詳しく説明しています。tcpdumpはデータのみを提示します。データをキャプチャし、ネットワークデバイスに接続するのはlibpcapです。
ティムケネディ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.