Я спробував це:
tcpdump -s 1500 -A -l -i eth0 '(port 6667) and (length > 74)'
Мені потрібна лише ascii її частина. Як видалити решту?
Я спробував це:
tcpdump -s 1500 -A -l -i eth0 '(port 6667) and (length > 74)'
Мені потрібна лише ascii її частина. Як видалити решту?
Відповіді:
Як пропонує Джош, tcpflow може надрукувати лише дані пакету TCP у файл або STDOUT. Ви можете передати tcpdump в tcpflow так:
tcpdump -i lo -l -w - port 23 | tcpflow -C -r -
Щоб переглянути лише одну сторону розмови, ви можете використовувати фільтри для tcpdump, наприклад dst port 23
.
tcpflow
як root?
Я не впевнений у точному синтаксисі для tcpdump
... насправді я позначив це питання як улюблене, бо хотів би знати! Але в якості альтернативного рішення ви можете спробувати використовувати tcpflow
натомість. Це працює по суті так само, але він друкує ASCII вихід набагато краще; він виключав заголовки та друкує пакети послідовно як потік, тому їх легше читати та слідкувати часом, ніж tcpdump
.
Я вважаю, що найелегантніше рішення - це просто вирвати tcpdump. Жодних труб:
tcpflow -c port 6667
І це все.
Швидкий і брудний спосіб зробити це - фільтрувати вихід через рядки:
tcpdump -nli eth0 '(port 6667) and (length > 74)' -s 0 -w - | strings
Іноді у вас немає інших інструментів, і для швидкого зазирнення в корисний вантаж цього достатньо. Безумовно, якщо вам потрібна точна корисна навантаження для ін'єкцій або точний аналіз, звичайно.
Якщо вам потрібна лише частина ASCII, ви можете використовувати: tcpdump -s 1500 -A -l -i eth0 '(port 6667) and (length > 74)'|sed 's/\.//g'
або з ngrep:ngrep -d eth0 -lq . '(port 6667) and (length > 74)' |sed -rn '/^ /s/\.//gp'