Utilisez netcat comme proxy pour enregistrer le trafic

4

Je souhaite utiliser netcat en tant que proxy pour enregistrer les demandes http et les réponses aux fichiers, puis les rediriger pour inspecter le trafic. Pense à WireShark.

J'ai essayé ce qui suit, où 'fifo' est un canal nommé, 'in' et 'out' sont des fichiers, proxy Netcat sur le port 8080, serveur sur le port 8081.

bien que vrai le chat fifo | nc -l -p 8080 | tee -a dans | nc localhost 8081 | tee -a out 1 & gt; fifo; terminé

Problèmes:

  • Netcat cesse de répondre après la première demande (la boucle est-elle ignorée?).

  • Netcat échoue avec msg localhost [127.0.0.1] 8081 (tproxy) : Connection refused si le serveur n'est pas disponible sur 8081. Question: Est-il possible de se connecter "paresseusement" à 8081 lorsque la demande est faite? C'est à dire. Je ne souhaite pas que 8081 s'exécute au démarrage de netcat.

deephacks
la source

Réponses:

5

ncat peut le faire assez facilement en utilisant l’argument --sh-exec.

La commande suivante vous permettra de voir les deux directions d’une connexion TCP en direct et permettra plusieurs connexions. La connexion à example.com est fait une fois pour chaque connexion reçue le localhost:8080.

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

Changer les deux tee commandes à tee -a ./file si vous souhaitez vous connecter à un fichier au lieu de l’afficher en direct. Vous pouvez également supprimer le -v pour désactiver la sortie commentée, ne laissant que les données transférées imprimées sur le terminal.

-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

Voir ncat --help ou man ncat pour plus de détails.

Oddstr13
la source
2

Utilisation socat , vous n'avez pas besoin des pipes et des fifos

RedGrittyBrick
la source
Fonctionne bien. Je suis capable de voir la réponse maintenant. Mais comment faire en sorte que socat reste en vie pour les demandes suivantes? A tenté while true; do socat -v tcp-listen:8080,keepalive=1 tcp:localhost:8081; done et socat -v tcp-listen:8080,keepalive=1 tcp:localhost:8081
deephacks
Essayer fork un péché socat -v tcp-listen:8080,fork tcp:localhost:8081
RedGrittyBrick
1

J'utiliserais tcpdump ( Didacticiel ) pour ça. Je pense que la commande que vous voulez ressemblerait à ceci:

sudo tcpdump -i eth0 -s0 -v port 8080
garyjohn
la source
2
tcpdump ne montre que les paquets bruts difficiles à lire. tcpflow fait exactement ce que je veux et élimine le besoin de demander / répondre par proxy. sudo tcpflow -p -i lo -c port 8081
deephacks