Изолировать приложение и проверить, какие пакеты оно отправляет через интернет
Я не уверен, что этот вопрос здесь уместен, так что прости меня, если я ошибаюсь.
Вот проблема: я хочу посмотреть, что конкретная программа отправляет в интернет, но дело в том, что на компьютере есть множество приложений и сервисов, которые используют интернет. Поэтому невозможно определить, какие пакеты были отправлены интересующим меня приложением.
Один из способов - попытаться закрыть все другие приложения, но это невозможно.
Так есть ли способ изолировать конкретное приложение? Я работаю на 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.