0

私の問題は、私がPF_PACKETで聴くと、私の箱が送信したパケットが得られ、それは望ましくないことです。raw_socketをkernelspaceの特定のインターフェイスにバインドする方法は?

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

代わりのETH_P_ALL私はETH_P_IPを試してみましたが、その後、私は唯一のパケットが私のホストに送信ます。だから、私の考えはソケットをインタフェースにバインドすることでした。 'sockaddr_ll'でifindexを定義できます。しかし、私はインターフェイスのインデックスを取得する機能が見つかりませんでした..カーネル空間ではioctlが動作しません。すべてのヘルプは

答えて

0

をいただければ幸いです

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)); 

は..私はあなたが何をしようとしてわからないんだけど、あなたはdev_get_by_nameを経由して、カーネル内のネットワーク機器を調べることができます。しかし、なぜカーネルのパケットを最初に捕まえようとしていますか? libpcapはuserspaceにあります。

関連する問題