0

Mein Problem ist, wenn ich mit PF_PACKET höre, bekomme ich auch die Pakete, die meine Box sendet und was unerwünscht ist.Wie bindet man einen raw_socket an eine bestimmte Schnittstelle im Kernelspace?

Statt ETH_P_ALL habe ich versucht ETH_P_IP, aber dann bekomme ich nur Pakete an meinen Host gesendet. Meine Idee war also, den Socket an eine Schnittstelle zu binden. Mit 'sockaddr_ll' kann ich den ifindex definieren. Aber ich habe keine Funktion gefunden, um den Index meiner Schnittstelle zu erhalten. Ioctl funktioniert nicht im 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)); 

Jede Hilfe

Antwort

0

geschätzt würde ich bin mir nicht sicher, was Sie zu tun versuchen, aber Sie können ein Netzwerkgerät im Kernel über dev_get_by_name nachschlagen(). Aber warum versuchen Sie, Pakete im Kernel in erster Linie zu fangen? Das ist, was libpcap in Userspace ist.