Изолировать приложение и проверить, какие пакеты оно отправляет через интернет

Я не уверен, что этот вопрос здесь уместен, так что прости меня, если я ошибаюсь.

Вот проблема: я хочу посмотреть, что конкретная программа отправляет в интернет, но дело в том, что на компьютере есть множество приложений и сервисов, которые используют интернет. Поэтому невозможно определить, какие пакеты были отправлены интересующим меня приложением.

Один из способов - попытаться закрыть все другие приложения, но это невозможно.

Так есть ли способ изолировать конкретное приложение? Я работаю на Windows7 и захвата пакетов с Wireshark

5 ответов

Решение

Учитывая, что вы используете Wireshark, ваши номера портов не будут автоматически преобразованы в имя приложения, поэтому вам нужно будет сделать немного больше, чтобы уточнить информацию, которую вы ищете. Каждое приложение, использующее TCP/IP для связи через сеть, будет использовать порты, чтобы сетевой стек знал, куда доставлять сегменты (мне нравится называть это адресом приложения).

Клиентам, подключающимся к серверному приложению через определенный порт, будет динамически назначаться номер порта из динамического диапазона. Итак, сначала вам нужно выяснить, какие соединения TCP/UDP открыты в вашем приложении:

netstat -b

в командной строке выдаст вам список соединений с именем исполняемого файла, создавшего соединение. Каждый исполняемый файл имеет одно или несколько соединений, перечисленных как 127.0.0.1:xxxxx, где X - номер локального порта для соединения.

Теперь в wireshark вы должны указать ему отображать пакеты, отправленные или предназначенные для этого порта, используя один или несколько из этих фильтров:

tcp.port == xxxxx или же udp.port == xxxxx

Добавить дополнительный or tcp.port == xxxxx для каждого соединения, которое вы хотите показать.

Это позволит вам видеть весь трафик для соединений, открытых вашим приложением, и Wireshark не будет включать в себя только необработанные сегменты TCP/UDP, а будет включать в себя различные протоколы прикладного уровня (например, HTTP), которые также использовали эти номера портов.

Если ваше приложение взаимодействует только с одним сервером, вы можете просто использовать IP-адрес этого сервера для фильтрации по:

ip.addr == x.x.x.x

Если вы используете Process Monitor от Microsoft, вы можете изменить фильтры, чтобы показывать только сетевые соединения от определенных процессов. Он не дает вам содержимое пакетов, но показывает, с какими хостами общается приложение.

Microsoft Network Monitor покажет вам процесс, ответственный за поток трафика.

Я нашел Microsoft Message Analyzer очень полезным для точно такой же цели. Это позволяет захватывать сетевой трафик и агрегировать его по дереву процессов.

Используйте System Internals Process Monitor для получения номера процесса приложения и ознакомьтесь с другими внутренними инструментами системы по адресу:

https://docs.microsoft.com/en-us/sysinternals/

Откройте cmd.exe и запустите, покажите параметры командной строки netstat, netstat /?,

Теперь попробуйте netstat -bo 1 >> c:/test.log . Это позволит вам найти данные о вашем сетевом подключении для определенных приложений в постоянно обновляемом файле.

Помните, что вы должны остановить netstat -bo >> c:/test.log от записи в журнал, введя ctl-C в окне cmd.

Просто замени My_Application с вашим приложением PNAME или же PID

netstat - программы | grep "My_Application"

Я не тестирую его на Windows 7. Но он работает на Linux.

Другие вопросы по тегам