Чи є простий інструмент командного рядка для пакетування нюху однієї команди в Linux?


11

Мені б хотілося, щоб у Linux був один інструмент командного рядка для пакетування нюху однієї команди. щось подібне, sniff dumpfile commandщоб ви могли просто запустити команду, яку ви хочете, щоб пакетувати нюхати в терміналі і отримати скидання пакетів десь в іншому місці.

Я хотів би скинути / зберегти / побачити лише мережевий трафік єдиної команди, яку я ввожу, а не весь трафік TCP в моєму єдиному мережевому інтерфейсі. Тож якби я увійшов у свій комп’ютер і у нього був IRC у фоновому режимі, і я це sniff somefile wget http://www.google.comхотів би, я хотів би побачити весь мережевий трафік, який команда wget зробила для завантаження http://www.google.com . Я не хочу, щоб у "somefile" мережевий трафік IRC заплутав речі.

Існує багато команд linux / unix, які приймають іншу команду і роблять щось інше. З sudo(запустити як суперпользователь), niceзмінити приємний рівень, trickle(обмежити пропускну здатність команди)


1
Що саме, що ти хочеш зробити? Ви хочете перевірити, чи виконується певна команда? Ви хочете нюхати мережевий трафік? Тому що використання фрази "пакет нюхає команду" для мене взагалі не має сенсу ...
wzzrd

wzzrd, дивіться розширене запитання
Rory

Відповіді:


10

Я нічого не знаю, але теоретично не може бути важко отримати щось подібне. Strace можна використовувати для перехоплення мережевих системних дзвінків.

# strace -f -e trace=network -s 10000 /usr/bin/command arguments

Це дасть вам інформацію про дані, що надсилаються між ядром та процесом. Вихід страз не є саме тим, що ви хотіли б. Однак strace використовує системний виклик ptrace для перехоплення системних викликів. Можливо, можна написати програму, щоб вивести дані трохи корисніше.

Крім того, ви також можете перехопити приємну розетку, зв’язати та прослухати системні дзвінки. Можливо, можливо, написати невелику програму, яка використовувала ptrace для цих викликів та libpcap, щоб динамічно змінювати фільтр захоплення кожен раз, коли відкривається нова розетка.


Було б чудово, якби він випустив щось, що Wireshark міг прочитати.
Бред Гілберт

Майте на увазі, що описана вище цятка є точною для Solaris (і, можливо, інших комерційних об'єднань). В Linux strace - це інструмент відстеження системних викликів, схожий за експлуатацією та виведенням на кроквяну систему на Solaris або tusc на HP-UX.
Джеймс Ф

1
Я описав страйк в Linux.
Девід Пашлі

8

Tracedump

Tracedump - це sniffer пакету IP-пакетів однієї програми, який фіксує всі пакети TCP та UDP одного процесу Linux.

Завантажте та описуйте тут: http://mutrics.iitis.pl/tracedump


1
Це має бути правильною відповіддю зараз.
h0tw1r3

4

Спробуйте Wireshark - команда буде tshark

  • tshark дозволяє вибрати фільтри на трафік, захоплений з інтерфейсу
  • використовуйте інші утиліти, такі як debian lsof, щоб визначити тип спілкування, здійснене вашим додатком інтересу.

Або ви справді просто хочете LSOF?


Я не думаю, що існує інструмент, який динамічно продовжує фільтрувати всю комунікацію, пов'язану з процесом. Однак ви можете спробувати відстежувати процес зв'язку з такими інструментами, lsofі як тільки у вас буде хороший фільтр, який може ізолювати зв’язок цього процесу від усіх інших трафіку, що працює у вашій системі, ви зможете отримати правильне захоплення.

Наприклад, wgetзвичайно IP-адреса місця призначення відрізняється від іншого трафіку, пов'язаного з процесом. Навіть якщо ви берете щось на зразок skypeцільового діапазону порту, зазвичай фіксується для примірника.


Це трохи схоже на принцип невизначеності. Зазвичай ви можете знати, що відбувається через набір шляхів комунікації (за допомогою нюхальної фільтрації за визначеною групою потоків) або де здійснюються різні комунікаційні зв’язки (з lsof).

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


lsof - це дивовижно, але я краще побачу, що він робить / надсилає / отримує.
Рорі

4

Навчіться використовувати вирази фільтрів.

Хоча це не буде робити химерні сліди, про які ви просите.

Це дозволить видалити майже всі "заплутані речі, такі як IRC", із захоплення.

Крім того, дуже корисно знати синтаксис фільтра для швидкого посилання в майбутньому.


2

Зокрема, для веб-браузера / веб-сторінки щось подібне до плагіна Firebug для Firefox може дати вам інформацію, яку ви шукаєте: http://getfirebug.com/net.html

Для більш загальних застосувань вам може знадобитися використовувати netstat для ідентифікації порту, який використовується додатком, а потім Wireshark / tshark / dtrace з фільтром, щоб захопити саме цей трафік. Не одна відповідь, яку ви шукали, хоча ...


1

Одна ідея, спробуйте VMWare

-setup vm
-конфігуруйте, що vm використовувати певний інтерфейс
-sniff на цьому інтерфейсі від хоста (це як людина у середній атаці)

Якщо ви виділите, які мережеві програми працюють на цьому vm, можливо, ви отримаєте свою відповідь

Ідеальнішим рішенням, я думаю, є робити те, що робить VMWare з точки зору того, як він визначає, як він вибирає інтерфейс для розмови. Я думаю, що його магія пов'язана з модулями ядра, якими він користується, в цьому випадку, ймовірно, модулем ядра vmnet.

Наскільки мені відомо, програми не знають, для якого інтерфейсу вони розмовляють, і я вважаю, що це за дизайном; вони не повинні турбуватися про такі речі.

Крім того,
можливо, програма вже існує, я не знаю. Але якби один був написаний, можна назвати його nettrace (наприклад) і Usage міг би бути схожим

Інтерфейс програми nettrace

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


так, це було б можливо. Однак було б чудово, якби був простий і швидкий інструмент для цього.
Рорі

Може, настав час для цього простого інструменту? Цікаво, чи буде це важко, ймовірно, мод vmnet може стати гарною відправною точкою (хоча я не знаю, чи виникнуть проблеми з ліцензуванням). Можливо, (хак) просто використовувати vmnet mod. Я знаю, що мене часто цікавлять такі питання.
rev

1

Припускаючи, що ви єдина людина в коробці, яка намагається підключитися до google у той час, я думаю, що щось подібне повинно зробити трюк:

tcpdump -w <outfile> -i <interface> tcp dst host www.google.com and dst port 80

Якщо ви не єдине з'єднання, яке намагається підключитися до google у вікні, то, якщо ви можете ідентифікувати IP / порт, до якого ви підключаєтесь, ви також можете вказати порт src / src ip.

Ідентифікація порту src може бути проблемою, якщо ви не можете вказати його на будь-якому клієнті, який ви використовуєте. Я не впевнений, чи можете ви з wget.

Я сильно підозрюю, що ви можете вказати як src, так і dst порти, netcatтак що якщо це був справді google, який вас цікавив, ви можете зробити GET (вручну) через netcat.

Звичайно, сторінка man надасть вам специфіку


1

Сторінка користувача tcpdump та багато веб-сайтів дають поглиблені приклади фільтрів, і є навіть кілька онлайн-сховищ виразів фільтрів tcpdump. Він повинен мати можливість робити майже все, про що можна мріяти, припускаючи, що ви знаєте щось про мережевий трафік (джерело, місце призначення, порти, протоколи тощо), крім того, що програма його генерує.

Якщо ви працюєте на сервері або без заголовка, ви завжди можете tcpdump написати дамп-файл, а потім відкрити його в Wireshark на своїй робочій станції і отримати розширену фільтрацію та графічний інтерфейс.


Ерм, який перехід на команду tcpdump обмежив би її єдиною програмою, яка генерує трафік?
Мілан Бабушков

1

Можливо, цей скрипт зробить те, що ви хочете, з відповідними модифікаціями команди tshark:

#!/bin/bash

# Start tshark in the background before we run the commsnd to be sniffed.
# Add more options to tshark, as appropriate to your command....
setsid tshark  -w dump -i eth0 tcp port 8080 >/dev/null 2>&1  &

sleep 2

wget www.google.com

# tshark keeps running if you don't kill it. 
# This kills all other tsharks that may be running.
pkill -9 tshark

Прочитайте файл дампа пізніше:

tshark -r dump

Ви захоплюєте порт 8080, але генеруєте трафік через порт 80; це не буде робити те, що ви маєте намір.
Джеймс Ф

Джеймс: Мій проксі підключається до 8080, ось як я запустив сценарій. Я повинен був змінити його 80 для цієї посади.
Не зараз

0

Dtrace повинен це дозволити, хоча я ще не знаю, чи це ще ввійшло в Linux.

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