Який найпростіший спосіб нюхати дані про трафік TCP в Linux?


79

Я хочу простим способом показати всі дані TCP (не заголовки TCP чи що-небудь інше), що переходять через будь-який інтерфейс у моєму вікні Linux.

Наприклад, я хочу мати магічну команду, яка, якщо я виконую:

magic_commmand_I_want port=1234

тоді якщо на моїй машині був сервер, який слухав порт 1234, і хтось зробив:

echo hello | nc localhost 1234
# Note: "nc" (aka "netcat") is a simple tool that sends data to a host/port

Тоді магічна команда просто роздрукувала:

hello

Я спробував "tcpdump", "ethereal", "tethereal", "tshark" та інші, але не очевидно, як ви їх дозволите:

  • не показувати IP-адреси чи інші метадані
  • показують лише "дані", що надсилаються, а не окремі пакети та їх заголовки
  • друкувати дані так, як є, не в шістнадцятковій формі, а не за допомогою маркерів зміщення пакетів
  • обнюхуйте весь мережевий трафік (будь то на eth0 чи eth1 чи lo та ін.)

Так, ви можете, ймовірно, з'єднати трубопровідний набір команд unix, щоб це зробити, але це не так просто запам'ятати наступного разу :)

Якщо у вас є простий приклад точного командного рядка, який це робить, це я хотів би.


2
tcpdump - потрібна вам магічна команда. Wireshark - це приємний графічний інтерфейс, що використовується на вершині бібліотеки, яку використовує tcpdump
Vinko Vrsalovic

3
Я знаю, що це старе питання, але мені цікаво знати, чому використання nc для "серверної сторони" також не було варіантом? "nc -l 1234" створює сервер, який прослуховує порт 1234 і друкує все, що йому надіслано, і закриває з'єднання. Якщо ви хочете зберегти з'єднання живим і не відключатися, ви можете додати опцію "-k".
StFS

2
@StFS, оскільки він хоче нюхати запущений порт і nc поскаржиться.
infoclogged

Відповіді:


106

Оновлення:

Як вказує Міхал у коментарях: З tcpflow версії 1.3 опція -e використовується для визначення імені сканера. Таким чином, друкується помилка "Недійсна назва сканера" ​​8983 "". Правильна команда

sudo tcpflow -i any -C -J port 1234

(також -Jбуло змінено на -gостанню версію)


Завдяки yves, що вказав на " tcpflow ". Ось командна лінія:

tcpflow -i any -C -e port 1234  # as root, or with sudo

Це робить все, що я хочу

  • відображає байт даних за байтом у міру його введення
  • не відображає жодних інших метаданих
  • прослуховує всі інтерфейси (тому він фіксує дані, що надходять з машини та зовні)

" -C" Повідомляє йому перейти на консоль замість файлу. " -e" Дозволяє кольори, так що клієнт> сервер і сервер-> клієнт візуально відрізняються.

Я встановив tcpflow, просто зробивши це

sudo apt-get install tcpflow

2
Ого. tcpflow приголомшливий, дякую! Врятував мене ТОННЕ від болю, який я мав із дротяним шальком. Wireshark, tcpdump тощо мають занадто багато інформації та насправді не роблять те, що задається оригінальним запитанням. tcpflow ідеально підходить для цього.
Русс

10
У tcpflow версії 1.3 -eопція використовується для визначення імені сканера. Таким чином, друкується помилка "Недійсна назва сканера" ​​8983 "". Правильна командаsudo tcpflow -i any -C -J port 1234
Міхал Ковач

6
Зауважте, що -Jце було змінено на -gостанню версію.
Твон

2
Хтось повинен пояснити авторам інструменту, що означає термін "зворотна сумісність"!
Шрідхар Сарнобат

Він друкує "речі" двічі для мене. Чому так ? lpaste.net/3984129577801744384
користувач1198559

29

socat - це інструмент, про який ви просите. Він може діяти як проксі:

$socat -v TCP-LISTEN:4444 TCP:localhost:1234
hello

тоді ваша програма повинна підключити порт 4444, а не безпосередньо підключитись до 1234

-v варіант - socat друкувати все, що отримується, на стандартній помилці (stderr).

Оновлення:

Якщо socat недоступний на вашій машині, ви все одно можете емулювати його таким чином за допомогою netcat:

$netcat -l -p 4444 | tee output_file | netcat localhost 1234

застереження: цей варіант односпрямований. другий екземпляр netcat надрукує будь-який відгук з вашого сервера на стандартний вихід. Ви все ще можете зробити це:

$mkfifo my_fifo
$netcat -l -p 4444 < my_fifo | tee output_file | netcat localhost 1234 > my_fifo

Припустимо, у мене немає контролю над клієнтом і сервером (або я не хочу його зупиняти), тому я не можу змінити, який порт задіяний або перехоплювати трафік. Тоді що?

20

Спробуйте Wireshark . Це відмінний аналізатор протоколів, орієнтований як на Linux, так і на Windows.


3
Мій досвід полягає в тому, що інтерфейс дійсно підходить для Linux.
Джо Філіпс

чорт, ти там переді мною, +1 на проводці

Чи можете ви навести приклад командного рядка?

Перегляньте це посилання wiki.wireshark.org/Tools У ньому подано список інструментів командного рядка для проводів. Придивіться до Dumpcap.
Кевін Бойд

13

tcpflow - це те, що ви хочете. Витяг із чоловічої сторінки:

ОПИС
tcpflow - це програма, яка фіксує дані, що передаються як частина з'єднань (потоків) TCP, і зберігає дані способом, зручним для аналізу протоколу або налагодження. Така програма, як tcpdump (4), показує зведення пакетів, які бачать на дроті, але зазвичай не зберігає дані, які фактично передаються. Навпаки, tcpflow реконструює фактичні потоки даних і зберігає кожен потік в окремому файлі для подальшого аналізу. tcpflow розуміє порядкові номери TCP і правильно реконструює потоки даних незалежно від повторної передачі чи доставки поза замовленням.

tcpflow зберігає всі захоплені дані у файлах, які мають назви форми

192.168.101.102.02345-010.011.012.013.45103

де вміст вищезазначеного файлу буде дані, передані з хосту 192.168.101.102 порту 2345, на хост 10.11.12.13 порт 45103.

Налаштуйте з'єднання з додатка програми до вашого сервера. Коли з'єднання працює і працює, tcpflow все ще може захоплювати дані з нього. Наприклад:

$ sudo tcpflow -i lo port 5555
tcpflow[3006]: listening on lo

Усі дані будуть зберігатися у файлі з іменем 127.000.000.001.48842-127.000.000.001.05555.

Ви все одно можете перенаправити це на стандартний вихід з опцією -C. Прочитайте сторінку керівництва, щоб зіграти з виразом, щоб налаштувати пакети, на які потрібно зафіксувати tcpflow.


2

ngrepдуже приємно для цього. Для пошуку в пакетах потрібна рядок BPF та необов'язкова рядок, а потім вивантажується вміст пакету на екран у досить корисному форматі. Він також необов'язково скидає файл pcap_dump, який ви можете більш детально вивчити в Wireshark пізніше.


0

Погляньте на Chaosreader . Хоча це трохи більше, ніж ви просите, і дещо інакше, напевно, ви могли б змінити його код, щоб зробити те, що ви хочете.


-1

Можливо, ви можете написати обгортку для tcpdump, наприклад, яка видалить всю зайву інформацію

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.