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

18

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

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

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

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

Сальвадор Дали
источник

Ответы:

13

Учитывая, что вы используете 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
Джон
источник
Самая большая проблема с сокетами (использующими незарезервированные порты) заключается в том, что сокеты, открываемые и закрываемые приложением, имеют очень динамичный характер. Когда вы запускаете команду netstat -b, вы получите разные результаты для каждого из перечисленных приложений, даже если вы запускаете его с интервалом в 5 секунд. Поэтому очень трудно заметить все номера портов, которые выделяются моему приложению. Я наблюдал то же самое для моего приложения в инструменте "TCPView" (sysInternals suite). Я увидел, что в течение 10 секунд моим приложением было открыто примерно 15 соединений через сокет TCP, и многие из них также были убиты
RBT
1
Вот где Microsoft Network Monitor пригодится, потому что он может отслеживать процесс, из которого происходит сетевое взаимодействие, и группирует его под этот процесс. Однако с тех пор, как это было написано, была выпущена новая основная версия Wireshark. Может случиться так, что такая группировка также возможна при использовании Wireshark, но я не использовал ее некоторое время.
Джон
7

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

длинная шея
источник
1
? Он хотел увидеть пакеты.
Пейсер
1

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

joeqwerty
источник
1

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

YaoLen
источник
0

Используйте 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.

Джеф Мар
источник
-2

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

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

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

Мостафа Лаваи
источник