Aggiornamento:
Come indicato da Michal nei commenti:Dalla versione 1.3 di tcpflow viene utilizzata l'opzione -e per specificare il nome dello scanner. Quindi viene stampato l'errore "Nome scanner non valido '8983'". Il comando corretto è
sudo tcpflow -i any -C -J port 1234
(anche -J
è stato cambiato in -g
nell'ultima versione)
Grazie a yves per avermi indicato "tcpflow". Ecco la riga di comando:
tcpflow -i any -C -e port 1234 # as root, or with sudo
Questo fa tutto quello che voglio
- mostra i dati byte per byte man mano che arrivano
- non mostra altri metadati
- ascolta su tutte le interfacce (quindi cattura i dati provenienti dall'interno e dall'esterno della macchina)
Il file "-C
" gli dice di eseguire il dump nella console anziché in un file. Il file "-e
" abilita i colori in modo che client->server e server->client siano visivamente distinti.
Ho installato tcpflow semplicemente facendo
sudo apt-get install tcpflow
socat è lo strumento che stai chiedendo. Può fungere da proxy:
$socat -v TCP-LISTEN:4444 TCP:localhost:1234
hello
quindi la tua applicazione deve connettersi alla porta 4444 invece di connettersi direttamente alla 1234
L'opzione -v consente a socat di stampare tutto ciò che riceve sullo standard error (stderr).
Aggiornamento:
Se socat non è disponibile sulla tua macchina, puoi comunque emularlo in questo modo con netcat:
$netcat -l -p 4444 | tee output_file | netcat localhost 1234
avvertimenti:questa opzione è unidirezionale. la seconda istanza netcat stamperà qualsiasi risposta dal tuo server sullo standard output. Puoi ancora farlo:
$mkfifo my_fifo
$netcat -l -p 4444 < my_fifo | tee output_file | netcat localhost 1234 > my_fifo
Prova Wireshark. È un eccellente analizzatore di protocollo destinato sia a Linux che a Windows.