0

私の問題は、PF_PACKET をリッスンすると、ボックスが送信するパケットも取得することです。これは望ましくありません。

err_create = sock_create(PF_PACKET, SOCK_RAW, htons(ETH_P_ALL), sock);

ETH_P_ALL の代わりに ETH_P_IP を試しましたが、ホストにしかパケットが送信されません。だから私の考えは、ソケットをインターフェースにバインドすることでした。「sockaddr_ll」を使用すると、ifindex を定義できます。しかし、インターフェイスのインデックスを取得する関数が見つかりませんでした.ioctl はカーネル空間では機能しません。

..

memset(&my_addr, 0, sizeof(struct sockaddr_ll));
my_addr.sll_family = PF_PACKET;
my_addr.sll_protocol = htons(ETH_P_ALL);
// my_addr.sll_ifindex = 2; //I tried different numbers.. but then I got no packets 

err_bind = sock->ops->bind(sock, (struct sockaddr_ll *)&my_addr, sizeof(my_addr));

どんな助けでもいただければ幸いです

4

1 に答える 1

0

何をしようとしているのかはわかりませんが、 dev_get_by_name()を介してカーネル内のネットワーク デバイスを検索できます。しかし、そもそもなぜカーネルでパケットをキャッチしようとしているのですか? それが、 userspaceでの libpcap の目的です。

于 2011-02-09T12:17:17.500 に答える