Ho provato questo:
tcpdump -s 1500 -A -l -i eth0 '(port 6667) and (length > 74)'
Ho solo bisogno della parte ascii di esso. Come rimuovo il resto?
Ho provato questo:
tcpdump -s 1500 -A -l -i eth0 '(port 6667) and (length > 74)'
Ho solo bisogno della parte ascii di esso. Come rimuovo il resto?
Risposte:
Come suggerisce Josh, tcpflow può stampare solo i dati del pacchetto TCP su un file o STDOUT. È possibile reindirizzare tcpdump a tcpflow in questo modo:
tcpdump -i lo -l -w - port 23 | tcpflow -C -r -
Per visualizzare solo un lato della conversazione, è possibile utilizzare i filtri per tcpdump, ad es dst port 23
.
tcpflow
come root?
Non sono sicuro dell'esatta sintassi per tcpdump
... in effetti, ho contrassegnato questa domanda come preferita perché mi piacerebbe saperlo! Ma come soluzione alternativa, potresti provare a utilizzare tcpflow
invece. Funziona essenzialmente allo stesso modo, ma stampa l'output ASCII molto meglio; ha escluso le intestazioni e stampa i pacchetti in sequenza come flusso, quindi a volte è più facile da leggere e seguire tcpdump
.
Sento che la soluzione più elegante è quella di abbandonare tcpdump. Nessun tubo di alcun tipo:
tcpflow -c port 6667
E questo è tutto.
Un modo rapido e sporco per farlo è filtrare l'output attraverso le stringhe:
tcpdump -nli eth0 '(port 6667) and (length > 74)' -s 0 -w - | strings
A volte non hai altri strumenti e per dare una rapida occhiata al payload questo è sufficiente. Non va bene se hai bisogno del payload esatto per l'iniezione o di un'analisi esatta, ovviamente.
Se hai bisogno solo della parte ASCII puoi usare: tcpdump -s 1500 -A -l -i eth0 '(port 6667) and (length > 74)'|sed 's/\.//g'
o con ngrep:ngrep -d eth0 -lq . '(port 6667) and (length > 74)' |sed -rn '/^ /s/\.//gp'