Networking 如何将原始_套接字绑定到内核空间中的特定接口?

Networking 如何将原始_套接字绑定到内核空间中的特定接口?,networking,network-programming,linux-kernel,bind,raw-sockets,Networking,Network Programming,Linux Kernel,Bind,Raw Sockets,我的问题是,当我听PF_数据包时,我也会收到我的盒子发送的数据包,这是不受欢迎的 err_create = sock_create(PF_PACKET, SOCK_RAW, htons(ETH_P_ALL), sock); 我尝试了ETH_p_IP而不是ETH_p_ALL,但之后我只收到发送到主机的数据包。所以我的想法是将套接字绑定到接口。通过“sockaddr\u ll”,我可以定义ifindex。但是我没有找到任何函数来获取接口的索引。。ioctl在内核空间中不工作 任何帮助都将不胜感激

我的问题是,当我听PF_数据包时,我也会收到我的盒子发送的数据包,这是不受欢迎的

err_create = sock_create(PF_PACKET, SOCK_RAW, htons(ETH_P_ALL), sock);
我尝试了ETH_p_IP而不是ETH_p_ALL,但之后我只收到发送到主机的数据包。所以我的想法是将套接字绑定到接口。通过“sockaddr\u ll”,我可以定义ifindex。但是我没有找到任何函数来获取接口的索引。。ioctl在内核空间中不工作


任何帮助都将不胜感激

我不确定您想做什么,但您可以通过dev\u get\u by\u name()在内核中查找网络设备。。但是为什么您首先要在内核中捕获数据包呢?这就是libpcap在用户空间中的作用

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