Wie kann skb in einem bestimmten Punkt des Linux-Netzwerk-Stacks gedrängt werden?

8

Ich möchte skb zu prerouting point des Linux-Netzwerk-Stacks schieben. Gibt es eine Möglichkeit, dies zu tun? Ich habe die Funktionen dev_queue_xmit() und netif_rx() verwendet, aber ich glaube nicht, dass sie skb in prerouting point des Linux-Netzwerk-Stacks pushen können.

    
Milad Khajavi 13.01.2014, 08:00
quelle

3 Antworten

2

Ich bin nicht ganz klar wo dieses skb herkommt. Im Benutzerland gibt es zwei Möglichkeiten, dies zu tun. Eine besteht darin, ein tun -Gerät zu verwenden (und das Paket einfach hineinzuschreiben). Das andere ist libpcap zu benutzen (was die wenig bekannte Eigenschaft hat, rohe Pakete zu verschicken, die unter allen empfangenen Daten verborgen sind).

Sie sagen, dass Sie dies tun möchten, indem Sie ein ioctl registrieren (was vermutlich bedeutet, dass Sie Ihr eigenes ioctl hinzufügen) und dann ioctl from user space aufrufen. Es ist nicht sofort offensichtlich, warum Sie das tun möchten, wenn Sie dies bereits ohne Änderung des Kernels erreichen können. Wenn Sie dies jedoch tun wollten, folgen Sie dem Pfad, den der tun -Treiber verwendet, und machen Sie das Äquivalent von write() -ing zum tun -Gerät in Ihrem neuen ioctl . Das könnte bedeuten, dass eine tun -ähnliche Schnittstelle vorhanden ist, die als Quelle für die Pakete fungiert. Ich vermute, Pakete im System brauchen eine Art Source-Interface.

    
abligh 25.01.2014 23:06
quelle
1

Ich vermute, dass Sie libpcap oder libnetfilter_queue im Folgenden zusammen als Userland Queuing bezeichnet werden wollen. Die Userland-Warteschleife leitet alle Pakete, die mit einer Regel übereinstimmen (die Sie definieren), an Ihre Benutzerlandanwendung weiter. Die Funktionen dev_queue_ * und netif_ * gelten für das Routing auf Kernel-Ebene und sind nicht relevant für Benutzerlandanwendungen.

Userland-Queuing hat Auswirkungen auf die Leistung und abhängig von der verwendeten Bibliothek müssen Sie eine bestimmte Methode verwenden, um Ihr Paket wieder in die Netfilter-Warteschlangen zu injizieren.

    
Claris 25.01.2014 20:49
quelle
0

Ich denke, die Funktion, nach der Sie suchen, ist ip_queue_xmit() , wo die IPV4-Implementierung beginnt, Tabellen, Filter usw. zu überprüfen.

    
Jefferson 17.10.2015 04:23
quelle