Показати мережеві з'єднання процесу


26

Є спосіб показати з'єднання процесу? Щось схоже:

show PID

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

Більш конкретний приклад з Firefox:

show `pidof firefox`

і з firefox я переходжу спочатку на google.com , потім на unix.stackexchange.com і нарешті 192.30.252.129 . Коли я закриваю броузер, вихід повинен бути:

google.com
stackexchange.com
192.30.252.129

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


Під яким варіантом Unix? Більшість мають інструменти для цього, але різні.
Жил "ТАК - перестань бути злим"

Отже, по суті, ви хочете журнал усіх з'єднань?
Сергій Колодяжний

Я думаю, tcpdump або Wireshark повинні зробити цю роботу тоді.
Сергій Колодяжний

Деякі можливі способи зробити це: askubuntu.com/questions/11709/…
Марк Плотник

@Gilles Ubuntu 14.04.3 LTS
квітня 1616

Відповіді:


24

Ви шукаєте strace! Я знайшов цю відповідь на askubuntu , але він дійсний для Unix:

Для запуску та моніторингу нового процесу:

strace -f -e trace=network -s 10000 PROCESS ARGUMENTS

Щоб контролювати існуючий процес із відомим PID:

strace -p $PID -f -e trace=network -s 10000

В іншому випадку, але це характерно для Linux, ви можете запустити процес в ізольованому просторі мереж імен і використовувати провідну операцію для контролю трафіку . Це, мабуть, буде зручніше, ніж читати straceжурнал:

  • створіть простір імен тестової мережі:

    ip netns add test
    
  • створити пару віртуальних мережевих інтерфейсів (veth-a та veth-b):

    ip link add veth-a type veth peer name veth-b
    
  • змінити активний простір імен veth-інтерфейсу:

    ip link set veth-a netns test
    
  • налаштування IP-адрес віртуальних інтерфейсів:

    ip netns exec test ifconfig veth-a up 192.168.163.1 netmask 255.255.255.0
    ifconfig veth-b up 192.168.163.254 netmask 255.255.255.0
    
  • налаштувати маршрутизацію в тестовому просторі імен:

    ip netns exec test route add default gw 192.168.163.254 dev veth-a
    
  • активуйте ip_forward та встановіть правило NAT для переадресації трафіку, що надходить із створеного вами простору імен (потрібно налаштувати мережевий інтерфейс та ip-адресу SNAT):

    echo 1 > /proc/sys/net/ipv4/ip_forward
    iptables -t nat -A POSTROUTING -s 192.168.163.0/24 -o YOURNETWORKINTERFACE -j SNAT --to-source YOURIPADDRESS
    

    (Ви також можете використовувати правило MASQUERADE, якщо вам зручніше)

  • нарешті, ви можете запустити процес, який ви хочете проаналізувати, у новому просторі імен, і також провідний опис:

    ip netns exec test thebinarytotest
    ip netns exec test wireshark
    

    Вам доведеться контролювати veth-інтерфейс.


2
straceнасправді є специфічним для ядра Linux, тому він не дійсний для всіх Unix-подібних операційних систем. Як я розумію, BSD-подібні системи мають подібні утиліти (DTrace та ферми). У будь-якому разі, хороша відповідь (настільки прихильна). Ласкаво просимо до обміну стеками.
Ентоні Г - справедливість для Моніки

Відповідь , здається, точка в правильному напрямку, однак у мене виникають проблеми інтерпретації на straceвиході при розгляді git fetch. Я сподівався побачити якусь URL-адресу, включену у висновок, про що також вимагає ОП. Може хтось допоможе?
andreee

14

Спробуйте

lsof -i -a -p `pidof firefox`

Він частково працює: друкує деякі поточні з'єднання процесу, але потім він автоматично закривається. Для деяких програм вихід тільки це попередження:lsof: WARNING: can't stat() fuse.gvfsd-fuse file system /home/user/.gvfs Output information may be incomplete.
ᴜsᴇʀ

Ви можете додати параметри -r1для повторення виходу щосекунди та -wпридушення попереджень.
alxrem

2
Це показує з'єднання лише в певний момент часу, у ньому не перераховано всі з'єднання, які процес здійснює протягом свого життя. Навіть якщо ви покладете цю команду в цикл, вона пропустить короткочасні з'єднання.
Жил "ТАК - перестань бути злим"

Опитуючий не просив переглядати з'єднання протягом життя. Можна інтерпретувати (in real-time)як from the point in time of tracking and forward.
llua

8

Ось ще один підхід:

ss -nap | grep $(pidof firefox)

Вибірка зразка:

tcp    ESTAB      0      0          192.168.0.222:49050    216.58.218.164:443    users:(("firefox",3280,69))
tcp    ESTAB      0      0          192.168.0.222:48630    198.252.206.25:443    users:(("firefox",3280,106))
tcp    ESTAB      0      0          192.168.0.222:44220     216.58.217.38:443    users:(("firefox",3280,140))
tcp    ESTAB      0      0          192.168.0.222:52690    54.240.170.181:80     users:(("firefox",3280,107))
tcp    ESTAB      0      0          192.168.0.222:48744    198.252.206.25:443    users:(("firefox",3280,87))
tcp    ESTAB      0      0          192.168.0.222:48811    198.252.206.25:443    users:(("firefox",3280,73))

1
Це показує з'єднання лише в певний момент часу, у ньому не перераховано всі з'єднання, які процес здійснює протягом свого життя. Навіть якщо ви покладете цю команду в цикл, вона пропустить короткочасні з'єднання.
Жил "ТАК - перестань бути злим"

5

Ви можете спробувати також netstat -p. На чоловіковій сторінці:

netstat - друкуйте мережеві з'єднання, таблиці маршрутів, статистику інтерфейсів, маскарадні з'єднання та членство в багатоадресному режимі

Щоб відображати лише мережеві з'єднання netstat -tup. Зауважте, що для перегляду PID процесу вам може знадобитися root.

Якщо у вас немає netstatвашої системи, можливо ss, у вас є майже точний синтаксис. Ви можете використовувати потім ss -tup(як root).


1
Це показує з'єднання лише в певний момент часу, у ньому не перераховано всі з'єднання, які процес здійснює протягом свого життя. Навіть якщо ви покладете цю команду в цикл, вона пропустить короткочасні з'єднання.
Жил "ТАК - перестань бути злим"

1
netstat -p | grep firefox | grep tcp
Philip Kirkbride

@Gilles Це означає, що це чудова відповідь для тих, хто хоче бачити з'єднання в певний час. Як це було у мене нещодавно.
Хосе Антоніо відновлює Моніку
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.