5

で作成されたソケットがありsocket(PF_PACKET, SOCK_RAW, htons(ETH_P_ALL))、次を使用して無差別モードに設定しました。

struct ifreq ifr;
strncpy((char*)ifr.ifr_name, interface, IF_NAMESIZE);
if(ioctl(sock, SIOCGIFINDEX, &ifr)<0) fail(2);

struct packet_mreq mr;
memset(&mr, 0, sizeof(mr));
mr.mr_ifindex = ifr.ifr_ifindex;
mr.mr_type = PACKET_MR_PROMISC;
if(setsockopt(sock, SOL_PACKET, PACKET_ADD_MEMBERSHIP, &mr, sizeof(mr)) < 0) fail(2);

問題はread()、ソケットから実行すると、コンピューターとの間でやり取りされるデータのみが返されることです。

ネットワーク上のすべてのパケットを読み取って処理するにはどうすればよいですか?

Wireshark はすべてのパケットに問題がないことを示しているので、それが自分のコンピュータまたは NIC ではないことがわかります。ifconfigそれが実行されているときであることを報告しPROMISCます。

4

4 に答える 4

4

Rob Jones の提案に沿って、Wiresharkなどのツールを試して、インターフェイスで期待どおりのパケットを受信して​​いることを確認してください。少なくとも、コードに問題があることを確認 (または拒否) します。

また、インターフェイス自体がプロミスキャス モードに設定されていることを確認する必要があります。そうでない場合は、ioctl() を使用して設定できます。

ifr.ifr_flags |= IFF_PROMISC;
if( ioctl(sock, SIOCSIFFLAGS, &ifr) != 0 )
{
    // handle error here
}

アプリケーションの実行中に、ifconfig がそのインターフェースの PROMISC フラグを報告することを確認してください。

これは、特権ユーザーとして実行する必要があることに注意してください。


提示されたコードを試してみました。私のために働きます。もちろん (102 行目のテストにより) これは TCP トラフィックの詳細のみを表示します。

于 2009-08-25T00:07:29.063 に答える
1

これはソフトウェアの問題ではない可能性があります。

間違ったハードウェアを使用している可能性があります。お使いのコンピュータはおそらくスイッチに接続されています。スイッチは、どのコンピュータがどのポートにあるかを「学習」し、トラフィックを必要な場所にのみルーティングするのに十分なほどスマートです。したがって、スイッチはパケットをフィルタリングしています。

これを修正するには、ハブを入手する必要があります。ハブとスイッチは非常によく似ていますが、動作が異なります。ハブはダムであり、すべてのトラフィックをすべてのポートにルーティングし、無差別モードで他のトラフィックを表示できるようにします。

コンピュータが接続しているデバイスを交換した場合でも、上流のより多くのスイッチに接続されている可能性があり、トラフィックも制限されることに注意してください。したがって、独自のハブまたはテストラボのセットアップよりもはるかに離れた場所からのトラフィックをスニッフィングすることはできません。

于 2009-08-25T03:58:43.883 に答える
1

SOCK_RAW ではなく、socket() の 2 番目の引数として SOCK_PACKET を使用してみてください。

スイッチを使用している場合は、コンピューター宛ての、またはコンピューターから発信されたパケットのみが表示される可能性があります。ハブを試してください。

于 2009-08-25T00:04:33.377 に答える
0

スイッチポートも適切に設定する必要があります(Ciscoの世界ではSPANポート)。詳細については、こちらをご覧ください。

http://www.winpcap.org/misc/faq.htm#Q-22

そして、SPANポートがどのように機能するかに関するシスコからの情報は次のとおりです。

http://www.cisco.com/en/US/products/hw/switches/ps708/products_tech_note09186a008015c612.shtml

于 2009-08-25T00:17:12.960 に答える