0

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

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

我尝试了 ETH_P_IP 而不是 ETH_P_ALL,但后来我只将数据包发送到我的主机。所以我的想法是将套接字绑定到接口。使用 '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()在内核中查找网络设备。但是,为什么您首先要尝试在内核中捕获数据包?这就是 libpcap 在userspace中的用途。

于 2011-02-09T12:17:17.500 回答