Verwenden Sie netcat als Proxy zum Protokollieren des Datenverkehrs

7501
deephacks

Ich möchte netcat als Proxy verwenden, um HTTP-Anforderungen und -Antworten in Dateien zu protokollieren und diese dann zu überprüfen, um den Datenverkehr zu untersuchen. Denke, wireshark.

Folgendes wurde ausprobiert, wobei "fifo" eine Named Pipe ist, "in" und "out" sind Dateien, netcat-Proxy an Port 8080, Server an Port 8081.

während wahr; Katze Fifo | nc -l -p 8080 | tee -a in | nc localhost 8081 | tee -a out 1> fifo; erledigt

Probleme:

  • Netcat hört auf, nach der ersten Anforderung zu antworten (während die Schleife ignoriert wird).

  • Netcat schlägt mit msg fehl, localhost [127.0.0.1] 8081 (tproxy) : Connection refusedwenn der Server auf 8081 nicht verfügbar ist. Frage: Kann die Verbindung zu 8081 "faul" hergestellt werden, wenn eine Anforderung erfolgt? Dh ich möchte nicht, dass 8081 läuft, wenn netcat gestartet wird.

4

3 Antworten auf die Frage

5
Oddstr13

ncat kann dies ganz einfach mit dem Argument --sh-exec tun.

Mit dem folgenden Befehl können Sie beide Richtungen einer TCP-Verbindung live sehen und mehrere Verbindungen zulassen. Die Verbindung zu example.comwird einmal für jede empfangene Verbindung hergestellt localhost:8080.

ncat -lkv localhost 8080 -c 'tee /dev/stderr | ncat -v example.com 80 | tee /dev/stderr' 

Ändern Sie die beiden teeBefehle in, tee -a ./filewenn Sie sich in einer Datei anmelden möchten, anstatt sie live anzuzeigen. Sie können auch die -vOption zum Deaktivieren der ausführlichen Ausgabe entfernen, wobei nur die übertragenen Daten auf das Terminal gedruckt werden.

-k, --keep-open Accept multiple connections in listen mode -l, --listen Bind and listen for incoming connections -v, --verbose Set verbosity level (can be used several times) -c, --sh-exec <command> Executes the given command via /bin/sh 

Siehe ncat --helpoder man ncatfür weitere Details.

2
RedGrittyBrick

Verwenden Sie socat, Sie brauchen keine Pfeifen und Fifos

Funktioniert gut Ich kann jetzt die Antwort sehen. Aber wie kann ich die Gesellschaft für nachfolgende Anfragen am Leben erhalten? Versucht, solange es wahr ist; do socat -v tcp-listen: 8080, keepalive = 1 tcp: localhost: 8081; done` und `socat -v tcp-listen: 8080, keepalive = 1 tcp: localhost: 8081` deephacks vor 11 Jahren 0
Versuchen Sie [`fork`] (http://www.dest-unreach.org/socat/doc/socat.html#OPTION_FORK) wie in` socat -v tcp-listen: 8080, fork tcp: localhost: 8081` RedGrittyBrick vor 11 Jahren 0
1
garyjohn

I'd use tcpdump (tutorial) for this. I think the command you want would look like this:

sudo tcpdump -i eth0 -s0 -v port 8080 
tcpdump zeigt nur unlesbare Pakete an, die schwer zu lesen sind. tcpflow macht genau das, was ich will, und macht das Anfordern von Proxy / Anfrage nicht erforderlich. `sudo tcpflow -p -i lo -c port 8081` deephacks vor 11 Jahren 2