Есть ли способ фильтровать / отслеживать поток TCP / SSL на основе определенного идентификатора процесса с помощью Wireshark ?
Есть ли способ фильтровать / отслеживать поток TCP / SSL на основе определенного идентификатора процесса с помощью Wireshark ?
Ответы:
Не понимаю как. PID не попадает в провод (вообще говоря), плюс Wireshark позволяет вам смотреть на то, что находится в проводе - потенциально на все машины, которые обмениваются данными по проводам. В любом случае идентификаторы процессов не уникальны на разных машинах.
На всякий случай, если вы ищете альтернативный способ, и вы используете среду Windows, Microsoft Network Monitor 3.3 - хороший выбор. В нем есть столбец с именем процесса. Вы легко добавляете его в фильтр с помощью контекстного меню и применяете фильтр. Как обычно, графический интерфейс очень интуитивно понятен ...
Вы можете сопоставить номера портов от wirehark до номеров портов, скажем, из netstat, который сообщит вам PID процесса, прослушивающего этот порт.
Используйте Microsoft Message Analyzer v1.4
Перейдите к ProcessId из средства выбора поля.
Etw
-> EtwProviderMsg
--> EventRecord
---> Header
----> ProcessId
Щелкните правой кнопкой мыши и добавьте как столбец
В Windows существует экспериментальная сборка, которая делает это, как описано в списке рассылки, Фильтр по имени локального процесса.
Это важная вещь, которую нужно сделать для отслеживания того, где определенные процессы пытаются подключиться, и кажется, что в Linux нет удобного способа сделать это. Однако возможны несколько обходных путей, поэтому я считаю, что о них стоит упомянуть.
Существует программа под названием nonet, которая позволяет запускать программы без доступа к Интернету (у меня в моей системе установлено большинство средств запуска программ). Он использует setguid для запуска процесса в группе nonet и устанавливает правило iptables, чтобы отклонять все соединения из этой группы.
Обновление: к настоящему времени я использую еще более простую систему, вы можете легко получить читаемую конфигурацию iptables с помощью ferm и просто использовать программу sg
для запуска программы с определенной группой. Iptables также позволяет перенаправить трафик, чтобы вы могли даже направить его на отдельный интерфейс или локальный прокси-сервер на порту, который позволяет фильтровать в wirehark или ЗАПИСЫВАТЬ пакеты непосредственно из iptables, если вы не хотите отключать весь Интернет, пока вы проверяют трафик.
Не очень сложно адаптировать его для запуска программы в группе и вырезать весь другой трафик с помощью iptables на время выполнения, и тогда вы сможете захватывать трафик только из этого процесса.
Если я когда-нибудь решусь написать это, я выложу ссылку здесь.
С другой стороны, вы всегда можете запустить процесс на виртуальной машине и обнюхать правильный интерфейс, чтобы изолировать создаваемые им соединения, но это было бы довольно плохим решением ...
Если вы хотите подписаться на приложение, которое еще нужно запустить, это, безусловно, возможно:
docker run -t -i ubuntu /bin/bash
(замените «ubuntu» на свой любимый дистрибутив, он не должен быть таким же, как в вашей реальной системе)any
, wlan0
, eth0
, ... выбрать новый виртуальный интерфейс docker0
вместо.У вас могут возникнуть сомнения по поводу запуска вашего программного обеспечения в контейнере, поэтому вот ответы на вопросы, которые вы, вероятно, захотите задать:
В некоторых случаях фильтрация по идентификатору процесса невозможна. Например, в моем случае мне нужно было прослушивать трафик от одного процесса. Но я нашел в его конфиге IP-адрес целевой машины, добавил фильтр ip.dst==someip
и вуаля. Это ни в коем случае не сработает, но кому-то пригодится.
Получите номер порта, используя netstat
:
netstat -b
А затем используйте фильтр Wireshark:
tcp.port == portnumber
Использование strace
больше подходит для этой ситуации.
strace -f -e trace=network -s 10000 -p <PID>;
возможность -f
также отслеживать все разветвленные процессы, -e trace=netwrok
фильтровать только системные вызовы сети и -s
отображать длину строки до 10000 символов.
Вы также можете отслеживать только определенные вызовы, такие как операции отправки, получения и чтения.
strace -f -e trace=send,recv,read -s 10000 -p <PID>;
Вы можете проверить номера портов с помощью этих примеров команд на wirehark: -
tcp.port == 80
tcp.port == 14220