rawソケットとlibcapの使用について少し混乱していました。誰でも簡単に両方を使用することの利点を指摘できます。私はいくつかのリンクを読みましたが、それは私を混乱させます。
2 に答える
libpcapは、さまざまなオペレーティングシステムでさまざまなメカニズムを使用します。Linuxでは、インターフェイスのLinuxリンク層タイプ(ARPHRD_値)を認識しているかどうか、およびそのリンク層タイプのインターフェイスが有用なリンク層ヘッダーを生成するかどうかに応じて、PF_PACKETrawまたはcookedソケットを使用します(PPPインターフェイスはそうではないので、ネットワーク層プロトコル識別子は表示されません)。Irixでは、RAWPROTO_SNOOPプロトコルでPF_RAWソケットを使用します。他のシステムでは、rawソケットをまったく使用しません。
rawソケットは、リンク層を気にすることなく生のIPv4パケットを送受信するなど、さまざまな目的に使用できます(つまり、ネットワークデバイスドライバーではなくIP層に接続します)。rawリンク層にアクセスする必要がある場合、ほとんどのOSのrawソケットはそれをサポートしていません(前の段落のように、LinuxとIrixは明らかな例外です)が、libpcapはサポートしています。
「libpcap」と「rawsockets」は別のトピックです。
Libpcapは、eth0などのネットワークインターフェイスを通過するトラフィック/パケットをキャプチャするために使用されるLinux用のパケットキャプチャライブラリです。
Windowsでは、Winpcapライブラリは同じことを行います。
rawソケットは、OSによって提供されるソケットAPIの機能であり、OSではなくアプリケーションによって定義されたヘッダーを持つパケットを送信するために使用できます。したがって、rawソケットを使用して、IP、TCPヘッダーを指定し、パケットを送信できます。
Linuxでは、生のソケットをいつでも利用できます。Windowsでは、rawソケットはWindowsXPおよびWindowsXP(SP1)でのみ使用可能でした。
Windowsでは、winpcapライブラリに任意のコンテンツを含むパケットを送信する機能があります。つまり、Windowsではwinpcapを使用してrawソケット機能を実現できます。