Actualización:
Como señaló Michal en los comentarios:Desde la versión 1.3 de tcpflow, la opción -e se usa para especificar el nombre del escáner. Entonces se imprime el error "Nombre de escáner no válido '8983'". El comando correcto es
sudo tcpflow -i any -C -J port 1234
(también -J
se ha cambiado a -g
en la última versión)
Gracias a yves por indicarme "tcpflow". Aquí está la línea de comando:
tcpflow -i any -C -e port 1234 # as root, or with sudo
Esto hace todo lo que quiero
- muestra los datos byte por byte tal como llegan
- no muestra ningún otro metadato
- escucha en todas las interfaces (por lo que captura los datos que provienen de dentro y fuera de la máquina)
El "-C
" le dice que descargue en la consola en lugar de un archivo. El "-e
" habilita colores para que cliente->servidor y servidor->cliente sean visualmente distintos.
Instalé tcpflow simplemente haciendo
sudo apt-get install tcpflow
socat es la herramienta que estás buscando. Puede actuar como un proxy:
$socat -v TCP-LISTEN:4444 TCP:localhost:1234
hello
entonces su aplicación debe conectarse al puerto 4444 en lugar de conectarse directamente al 1234
La opción -v es para que socat imprima todo lo que recibe en el error estándar (stderr).
Actualización:
Si socat no está disponible en su máquina, aún puede emularlo de esa manera con netcat:
$netcat -l -p 4444 | tee output_file | netcat localhost 1234
advertencias:esta opción es unidireccional. la segunda instancia de netcat imprimirá cualquier respuesta de su servidor a la salida estándar. Todavía puede hacerlo entonces:
$mkfifo my_fifo
$netcat -l -p 4444 < my_fifo | tee output_file | netcat localhost 1234 > my_fifo
Prueba Wireshark. Es un excelente analizador de protocolos dirigido tanto a Linux como a Windows.