Frage

Ich bin versucht, eine Userspace-Anwendung zu schreiben, die in eine OS-Netzwerk-Stack einhaken können, schnüffeln Pakete fliegen vorbei und bearbeiten diejenigen, die ihr Interesse an.

Nach vielen googeln, erscheint es mir, dass die einfachste (noch recht robust) Methode, dies zu tun (auf jeder Plattform) ist Linux offiziellen Dokumentation. Seine wichtigsten Merkmale (wie durch den ersten Link angegeben sind)

  • Empfang der Warteschlange Pakete vom Kernel nfnetlink_queue Subsystem
  • ausstellende Urteilssprüche und / oder verändert Pakete Reinjezierung an den Kernel-Subsystem nfnetlink_queue

Der Schwerpunkt ist meine eigene. Wie genau bin ich meine über diese gehen? Ich habe versucht, die Probe Code versehen ändern, aber vielleicht ich etwas Missverständnis. Der Code wird in NFQNL_COPY_PACKET-Modus arbeitet, so I am das gesamte Paket empfangen - aber meine Änderungen zu scheinen, um meine eigenen Anwendung beschränkt zu sein - wie man erwarten würde, angesichts der „kopieren“ Semantik .

Mein Gefühl ist, dass ich gemeint bin Verwendung von NF_QUEUE machen irgendwie, aber ich habe es nicht ganz grokked. Alle Zeiger?

(Wenn es ein einfacherer Mechanismus, dies zu tun ist, die auch Cross-Plattform ist, würde ich gerne davon hören!)

War es hilfreich?

Lösung

Ich kann nicht glauben, dass ich verpasst diese vorher. Als zurückhaltender, wie ich bin Fragen auf SO schreiben, dachte ich, ich würde dieses heraus mich nie funktionieren. :)

Ich habe nicht an dem Funktionsprototyp richtig. Es stellt sich heraus, in der „Urteil“ -Funktion (skizzierte unten)

int nfq_set_verdict(struct nfq_q_handle *qh,
    u_int32_t id,
    u_int32_t verdict,
    u_int32_t data_len,
    const unsigned char *buf     
)

Die letzten beiden Parameter sind für die Daten zu zurück mit dem Netzwerk-Stack. Offensichtliche im Nachhinein, aber ich vermisste es vollständig die print_pkt Funktion die Paketdaten als Parameter nicht nehmen, aber Auszüge aus dem struct nfq_data.

Der Schlüssel ist, um das Paket NF_ACCEPT und das in geeigneter Weise modifizierte Paket zurück an den Kernel übergeben.

Andere Tipps

Nur eine wilde Vermutung von Graben, den Quellcode um: versuchen, explizit die verstümmelten Nutzlast Hinzufügen nfnl_addattr_l(…, NFQA_PAYLOAD, …) mit

?
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top