Как узнать, какое приложение использует сеть?

9

Очень редко при использовании моего Mac я замечаю, что мое интернет-соединение замедляется. Используя Activity Monitor, я вижу, что это происходит потому, что что-то загружает данные с полной скоростью, которую может поддерживать мое соединение - но я не знаю, как сказать, что за это отвечает. Это может быть вызвано несколькими причинами (синхронизация Dropbox; некоторые приложения выполняют автоматическое обновление; совсем недавно это была буферизация видео на вкладке браузера, о которой я забыл), поэтому было бы очень удобно иметь способ сообщить какое приложение отвечает за использование сети. Это возможно в OS X? В идеале я ищу бесплатное решение. (Командная строка в порядке.) Я на Snow Leopard, если это имеет значение.

Натаниель
источник

Ответы:

6

Вы можете попробовать этот dtraceоднострочник:

sudo dtrace -n 'syscall::recvfrom:return { @[pid,execname] = sum(arg0); }'

Подождите некоторое время, затем нажмите Control-C. Он напечатает сводку количества байтов, прочитанных из сокетов, распределенных между процессами. Для более детального просмотра замените sumна quantize. Или просто посмотреть количество операций чтения из сокета, замените sumна count.

Отказ от ответственности: я пробовал это только на Lion, но AFAIK никаких больших изменений в способности dtrace не произошло между SL и Lion.

Харальд Ханче-Олсен
источник
1
Большое спасибо! Просто и эффективно и делает именно то, что мне нужно. Отлично работает на Snow Leopard.
Натаниэль
... хотя на самом деле при использовании «суммы» числа выглядят немного странно - Google Chrome обычно получает отрицательное число (!). Но используя квантование они выглядят разумно.
Натаниэль
Отрицательные числа, а? Может быть, это случай переполнения. Или, если вы получаете маленькие отрицательные числа, помните, что системные вызовы возвращают -1, если произошла ошибка. Если это переполнение, я думаю, что это не произойдет, если вы запустите 64-битное ядро.
Харальд Ханче-Олсен
Это средние отрицательные числа. Вот типичный вывод (взятый при повторной загрузке этой страницы в Chrome): 250 Google Chrome -159; 39 KernelEventAgen 1; 19 mDNSResponder 2240; но я могу просто неправильно их интерпретировать - когда я использую 'quanitze', есть столбец "value", который может иметь отрицательные значения, и столбец "count". Похоже, команда sum сообщает сумму (value) * (count). Может быть, отрицательные значения означают входящие пакеты или что-то?
Натаниэль
Нет, это все о входящих данных ... Я думаю, что Chrome часто опрашивает, вызывая recvfrom с коротким тайм-аутом, установленным в сокете, и в этом случае возвращается значение -1, если данных нет. Смотрите страницу руководства для recvfrom.
Харальд Ханче-Олсен
6

Брандмауэры

Вы можете использовать Little Snitch или HandsOff . Они являются отличными брандмауэрами, и оба имеют функцию «Сетевой монитор», которая сделает эту работу:

Little Snitch включает в себя сетевой монитор, показывающий подробную информацию обо всем входящем и исходящем сетевом трафике.
Значок состояния в строке меню отображает сводную информацию о текущей сетевой активности, а в случае новых событий трафика автоматически появляется окно с более подробной информацией.

Hands Off - это приложение для мониторинга и контроля доступа приложений к вашей сети и дискам. Возможность отслеживать обычно незаметные действия позволяет вам принимать обоснованные решения относительно передачи вашей личной информации, что позволяет избежать утечки конфиденциальной информации.

введите описание изображения здесь введите описание изображения здесь

Сетевые мониторы: Little Snitch (слева), HandsOff (справа)

неттоп

Бесплатное и встроенное решение Cli (к сожалению, оно не включено в Snow Leopard) - это неттоп . Неттоп группирует трафик по программам и портам и измеряет различную сетевую статистику.

Другой

Есть несколько других программ, которые собирают и измеряют трафик ( iftop , wireshark , tcpdump ), но они не знают, что такое pid. Чтобы установить соединение, вы должны использовать netstat .

mspasov
источник
Спасибо! Я отредактировал вопрос, чтобы указать, что я в идеале ищу бесплатное решение (30 евро - это слишком много для того, что я бы использовал только очень редко), но если нет бесплатного способа сделать это, тогда я ' приму этот ответ.
Натаниэль
Извини, я виноват. Я постараюсь найти бесплатную альтернативу и обновлю свой ответ.
mspasov
Ха! nettopбыл новым для меня. Выглядит удобно.
Харальд Ханче-Олсен
Я бы тоже принял этот ответ, если бы это было возможно. Если я обновлюсь до Lion, то, похоже, неттоп действительно пригодится.
Натаниэль
4
sudo fs_usage -f network

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

Nohillside
источник
1
Спасибо, это действительно полезно. Я впечатлен количеством полезных ответов на этот вопрос.
Натаниэль
1

«Книга DTrace» имеет скрипт soconnect.d , который делает это.

Скопируйте версию «Mac OS X», вставьте ее в текстовый файл и запустите из терминала с помощью sudo dtrace -s soconnect.d.

кругозор
источник
Но это не дает вам представление о количестве сетевого трафика, который получает процесс, не так ли? Насколько я могу судить, он только отслеживает соединения.
Харальд Ханче-Олсен
1

Монитор активности также имеет столбцы для полученных и отправленных байтов с 10.9:

LRI
источник