Як простежити мережеву активність команди?


14

Я хочу простежити мережеву активність команди, я пробував tcpdump та strace без успіху.

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

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

Чи є спосіб це зробити?

ОНОВЛЕННЯ:

Я не хочу відслідковувати все, що відбувається в моєму мережевому інтерфейсі. Я просто хочу відстежити командну (наприклад, #yum install -y vim) мережеву діяльність. Наприклад, сайт, на який він намагається зайти.


1
Покладіть додаток у мережевий простір імен, після чого використовуйте tcpdump / wireshark. Дивіться, наприклад, тут .
dirkt

Відповіді:


17

netstat для простоти

Використання netstatта прив'язка до PID або імені процесу:

# netstat -np --inet | grep "thunderbird"
tcp        0      0 192.168.134.142:45348   192.168.138.30:143      ESTABLISHED 16875/thunderbird
tcp        0      0 192.168.134.142:58470   192.168.138.30:443      ESTABLISHED 16875/thunderbird

І ви можете використовувати watchдля динамічних оновлень:

watch 'netstat -np --inet | grep "thunderbird"'

З:

  • -n: Показуйте числові адреси замість спроб визначення символічних імен хоста, порту чи користувача
  • -p: Показати PID та назву програми, до якої належить кожен сокет.
  • --inet: Показуйте лише розетки протоколу raw, udp та tcp.

страйс для багатослівності

Ви сказали, що ви спробували цей straceінструмент, але ви спробували варіант trace=network? Зауважте, що результат може бути досить багатослівним, тому вам може знадобитися певне привчання. Ви можете почати, натиснувши на "sin_addr".

 strace -f -e trace=network <your command> 2>&1 | grep sin_addr

Або для вже запущеного процесу використовуйте PID:

 strace -f -e trace=network -p <PID> 2>&1 | grep sin_addr

+1, для netstatякого IMHO - найпростіше і найновіше рішення.
dr01

@Gohu я зробив те ж саме для dnf. але не везіння Я спробував встановити деякі пакети за допомогою dnf, тоді я бачу, що процес dnf працює (назва процесу: dnf відповідно до команди top та ps aux). На жаль, я не отримав жодного результату від netstat -np --inet | grep "dnf".
Буванеш Кумар

+1 для страйку. Це вирішено моє питання. Я можу отримати IP-адреси. Дуже дякую за вашу відповідь :) @Gohu. Я думаю, він дає всі IP-адреси, які він отримує по мережі (наприклад, IP маршрутизатора та інших IP-адрес). Якщо ви знаєте, чи можна відстежувати лише IP-адресу призначення?
Буванеш Кумар

Ви можете спробувати відфільтрувати straceвихід ще декілька, зберігаючи лише connectsyscalls та видаляючи dnsзапити (порт 53) за допомогою:| grep connect | grep -v 'sin_port=htons(53)'
Gohu

+1 для опції простежувальної мережі на
страйсі


5

sysdig дозволяє контролювати всю активність ядра або декількох команд, що виконуються у вашій системі під час руху, включаючи та не обмежуючись мережевою активністю.

Оскільки вихід може бути великим, вам потрібно створити фільтри, сторінка за замовчуванням для самих основних фільтрів цілком зрозуміла.

Він також має перевагу, що він не використовується як обгортка додатків, як в strace, і він може бути досить потужним.

З прикладів Сисдіга

Мережі

Дивіться основні процеси щодо використання пропускної здатності мережі

sysdig -c topprocs_net 

Показати мережеві дані, що обмінюються з хостом 192.168.0.1

Як двійкові:

sysdig -s2000 -X -c echo_fds fd.cip=192.168.0.1   

Як ASCII:

sysdig -s2000 -A -c echo_fds fd.cip=192.168.0.1 

Перегляньте головні порти локального сервера:

З точки зору встановлених зв'язків:

sysdig -c fdcount_by fd.sport "evt.type=accept"   

У перерахунку на загальний байт:

sysdig -c fdbytes_by fd.sport 

Перегляньте IP-адреси головного клієнта

З точки зору налагоджених зв’язків

sysdig -c fdcount_by fd.cip "evt.type=accept"   

У перерахунку на загальний байт

sysdig -c fdbytes_by fd.cip 

Перерахуйте всі вхідні з'єднання, які не обслуговуються apache.

sysdig -p"%proc.name %fd.name" "evt.type=accept and proc.name!=httpd"

1

Ви можете використовувати дротик, щоб обнюхати весь вхідний і вихідний трафік мережевого інтерфейсу. Якщо вам потрібна опція без GUI, ви можете використовувати tshark.

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


1
Як я вже говорив раніше, якщо я запускаю кілька пов'язаних з мережею команд, то як я можу знати, яка команда отримує на який сайт?
Буванеш Кумар

Це більш загальна відповідь. Це я вже знаю, що ми можемо відстежувати мережеву активність мережевого інтерфейсу :). Я шукаю відстеження певної статики командної мережі.
Буванеш Кумар

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