Ich muss einige kleine Änderungen am eingehenden Datenverkehr von einem bekannten TCP-Host vornehmen: port, bevor der Prozess, der die Verbindung verarbeitet, den Stream erhält.
Beispielsweise sei 192.168.1.88 ein Remote-Host, auf dem ein Webserver ausgeführt wird.
Ich brauche das, wenn ein Prozess auf meinem lokalen Host Daten von 192.168.1.88:80 (z. B. dem Browser) empfängt, werden die Daten zuerst geändert und text-A
durch folgende ersetzt text-B
:
- 127.0.0.1: ... stellt eine Verbindung zu 192.168.1.88:80 her
127.0.0.1: ... sendet an 192.168.1.88:80:
GET /
192.168.1.88:80 sendet an 127.0.0.1: ...:
HTTP/1.0 200 OK Content-Type: text/plain Some text-A, some other text
Diese Daten werden vom System etwas abgefangen und an ein Programm übergeben, dessen Ausgabe lautet:
HTTP/1.0 200 OK Content-Type: text/plain Some text-B, some other text
Das System gibt die so geänderten Daten an die Prozessverarbeitung 127.0.0.1: ... weiter, als ob sie von 192.168.1.88:80 stammt.
Angenommen, ich habe eine Stream-basierte Methode, um diese Änderungen vorzunehmen ( sed
z. B. mithilfe von). Was ist der einfachste Weg, um den eingehenden TCP-Stream vorzuverarbeiten?
Ich denke, das würde beinhalten iptables
, aber ich bin nicht sehr gut darin.
Beachten Sie, dass die Anwendung das Gefühl haben sollte, mit dem ursprünglichen Host umzugehen, sodass das Einrichten eines Proxys wahrscheinlich keine Lösung ist.
quelle
Antworten:
Verwenden Sie Netsed- und Iptables-Proxy.
Dann renne:
NetSED ist ein kleines und praktisches Dienstprogramm, mit dem Sie den Inhalt von Paketen, die über Ihr Netzwerk weitergeleitet werden, in Echtzeit ändern können. Es ist sehr nützlich für das Ändern, Fälschen oder Manipulieren von Netzwerkpaketen. NetSED unterstützt:
Black-Box-Protokollprüfung - immer dann, wenn zwei oder mehr proprietäre Boxen über ein undokumentiertes Protokoll kommunizieren. Durch Erzwingen von Änderungen bei laufenden Übertragungen können Sie testen, ob die geprüfte Anwendung als sicher beansprucht werden kann.
Fuzz-Generierungsexperimente, Integritätstests - wann immer Sie Stabilitätstests einer Anwendung durchführen, um festzustellen, wie sie sich um die Datenintegrität kümmert;
andere häufige Anwendungsfälle: irreführende Übertragungen, Inhaltsfilterung, Protokollkonvertierung - was auch immer am besten zu Ihrer Aufgabe passt.
quelle
netsed
, es passt fast perfekt zu meinem Zweck. Das einzige, was ich nicht verstehe, ist, wie man den "lokalen transparenten Proxy" einrichtet (siehe Frage). Vielleicht sollte ich eine andere (virtuelle) Netzwerkschnittstelle einrichten, um dies zu erreichen. Übrigens ist dies vorerst die befriedigendste Antwort.OUTPUT
, nichtPREROUTING
. Auch die-D
Option musste-A
für mich sein. auch für die-j
Option musste ichDNAT --to-destination (ip)
oder verwendenREDIRECT --to-port
. Schließlich konnte ich den Segmentierungsfehler von netsed NICHT beheben. siehe auch: ubuntuforums.org/showthread.php?t=2337389Sie können genau dies tun, indem Sie iptables verwenden, um Verbindungen über einen Squid-Proxy transparent zu vertreten , und dann den http-Inhalt von Squid für Sie neu schreiben lassen.
quelle
iptables
+ Die Verwendung von libnetfilter_qu ist eine weitere Option, die das tut, was Sie wünschen:"... geänderte Pakete [erneut einwerfen] in das Kernel-Subsystem nfnetlink_queue."
Es wird Ihnen wahrscheinlich die größte Erweiterbarkeit bieten, da es an Ihnen liegt, Software zu codieren.
Es gibt auch einen Python-Wrapper .
quelle