На Linux, как я могу сказать, какой процесс отправляет пакеты Ethernet?

18

Я использую gkrellm, который показывает, что какой-то процесс в моей системе Debian Linux записывает примерно 500 КБ / с в eth0. Я хотел бы узнать, какой это процесс. Я немного знаю о netstat, но он показывает огромное количество открытых TCP-соединений, и я не могу заставить его генерировать какую-либо информацию о трафике.

Кто-нибудь знает, как я могу получить список процессов, которые на самом деле используют интерфейс eth0, чтобы я мог отследить нарушителя?


FOLLOWUP : Дистрибутив Debian Linux содержит nethogsпакет, который решает эту проблему окончательно. Родственные инструменты, которые не совсем на марке включают iftop, netstatи lsof.

Норман Рэмси
источник
iptrafэто хорошо
Luv33preet
У меня это работало для очень коротких обменов UDP: serverfault.com/a/683327/119360
Люк,

Ответы:

16

Я предпочитаю nethogs . Это небольшая консольная программа на основе ncurses, которая удобно отображает состояние сетевого трафика для каждого процесса.

Янне Пиккарайнен
источник
18

netstat -ptuпредоставит вам идентификаторы процессов (вместе со стандартной информацией netstat) для всех соединений tcp и udp. (Обычные пользователи не смогут идентифицировать все процессы.)

Если что - то рассылает сумму справедливой постоянного движения вы должны увидеть его Recv-Qили Send-Qстолбцы 2 и 3 соответственно.

Примеры:
Recv-Q
sudo watch -n .1 'netstat -tup | grep -E "^[t,u]cp[6]{0,1}" | sort -nr -k2'

Send-Q
sudo watch -n .1 'netstat -tup | grep -E "^[t,u]cp[6]{0,1}" | sort -nr -k3'

Если вы подозреваете, что этот процесс запускается другим процессом ps axf.

84104
источник
(Не обязательно указывать флаг -u, если вы знаете, что ищете TCP-соединения.)
andol
5

Более ручная операция, если вы ищете только процесс отправки / получения данных, состояла бы в запуске lsofкоманды. Это перечислит все открытые файлы для каждого процесса, которые будут включать сетевые подключения, поскольку они являются файловыми дескрипторами для ОС.

Не уверен, что это то, что вы ищете.

gdurham
источник
4

Установить iftop(простой текстовый) или ntop(графический).

Дэвид Шварц
источник
1
iftopтолько отображать использование полосы пропускания на интерфейсе.
кванты
Это показывает гораздо больше, чем это. По умолчанию он разбивает его по хостам.
Дэвид Шварц
Может ли он перечислить все процессы, которые используют интерфейс? Если да, не могли бы вы показать нам команду и параметры?
кванты
1
Не напрямую. Но как только вы найдете хост, вы можете найти процесс, например, с помощью netstat -pn.
Дэвид Шварц
3

Используйте, tcpdumpчтобы прослушать некоторые пакеты на этом интерфейсе:

# tcpdump -vv -s0 -i eth0 -c 100 -w /tmp/eth0.pcap

Скопируйте в клиент и откройте с помощью Wireshark, чтобы увидеть, что происходит.

кванты
источник
Не самый простой способ получить простую статистику, но что-нибудь, даже немного более сложное, и Wireshark будет блестеть!
Silverfire