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在kernelspace中不起作用。

..

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

任何幫助,將不勝感激

回答

0

我不知道你想做什麼,但你可以通過dev_get_by_name查找網絡設備在內核()。但是你爲什麼試圖首先捕獲內核中的數據包?這就是libpcap用於用戶空間

相關問題