1

Я знаю, что для этого есть множество приложений (например, procxplorer), но есть ли доступ к winapi (какой метод / ссылка используется) для получения сетевого трафика (TCP, UDP и т.д.) Для приложения или процесса?

3 ответа3

2

Из ваших комментариев я понимаю, что вы пытаетесь захватить сетевой трафик, генерируемый приложением, которое вы разрабатываете, внутри самого приложения. Если это так, я думаю, что этот вопрос лучше подходит для StackOverflow, поскольку это сообщество разработчиков. Такой самоанализ, вероятно, потребует использования ETW (Event Tracing для Windows), но опять же я не могу быть уверен. Этот вопрос о SO может помочь.

Оставив это на мгновение и сосредоточив внимание на административной стороне (что вы обычно получаете, задавая вопросы здесь), я хотел бы обратить ваше внимание на команду netsh trace и Microsoft Network Monitor (Netmon). Вы можете захватывать данные непосредственно из NetMon в то время, когда вы хотите это сделать, или же вы можете дать себе больше гибкости с помощью команды netsh trace, автоматически вызывая ее.

Если это представляет интерес, вы можете сделать:

netsh trace start capture=yes traceFile=c:\tracefolder\tracename.etl

начать захват, а затем:

netsh trace stop

когда ты готов. Есть и другие варианты, так что вы можете посмотреть руководство, используя netsh trace /?

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

0

Не уверен насчет winapi, но « Wireshark» - это первый в мире анализатор сетевых протоколов. Это позволяет вам видеть, что происходит в вашей сети на микроскопическом уровне. Это де-факто (и часто де-юре) стандарт во многих отраслях и учебных заведениях ».

0

Вы можете использовать libpcap . Libpcap - это библиотека с открытым исходным кодом, которая обеспечивает высокоуровневый интерфейс для системы захвата сетевых пакетов.

Libpcap API разработан для использования на C и C++ , однако существует множество оболочек, которые позволяют использовать его на таких языках, как Perl , Python , Java , C# , Ruby .

Libpcap работать на большинстве Unix-подобных операционных систем, есть также версия для Windows с именем Winpcap Win Dows P acket Cap кривизну).

Смотрите документацию по Winpcap.


Обновить

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

Эти обстоятельства, что можно сделать с помощью pcap?

В случае, если мы хотим только прослушивать определенный трафик (например, только пакеты TCP/IP , только пакеты, отправляемые на порт 23 и т.д.), Мы должны создать набор правил, compile его и применить его. Это трехэтапный процесс, который тесно связан. Набор правил хранится в строке и преобразуется в формат, который pcap может прочитать (следовательно, скомпилировать его).

Компиляция на самом деле просто делается путем вызова функции в нашей программе; это не связано с использованием внешнего приложения. Затем мы говорим pcap применить его к любому сеансу, который мы хотим отфильтровать.


Обновление 2

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

  1. Мы начнем с определения того, какой интерфейс мы хотим прослушать. В Linux это может быть что-то вроде eth0 , в BSD это может быть xl1 и т.д. Мы можем либо определить это устройство в строке, либо попросить pcap предоставить нам имя интерфейса, который будет выполнять эту работу.

  2. Инициализировать pcap. Здесь мы на самом деле сообщаем pcap, на каком устройстве мы нюхаем. Мы можем, если мы хотим, нюхать на нескольких устройствах. Как мы различаем их? Использование файловых дескрипторов. Точно так же, как открытие файла для чтения или записи, мы должны назвать наш session сниффинга, чтобы мы могли отличить его от других подобных сеансов.

  3. В случае, если мы хотим только прослушивать определенный трафик (например: только пакеты TCP/IP, только пакеты, отправляемые на порт 23 и т.д.), Мы должны создать набор правил, "скомпилировать" его и применить его. Это трехэтапный процесс, который тесно связан. Набор правил хранится в строке и преобразуется в формат, который pcap может прочитать (следовательно, скомпилировать его).

    Компиляция на самом деле просто делается путем вызова функции в нашей программе; это не связано с использованием внешнего приложения. Затем мы говорим pcap применить его к любому сеансу, который мы хотим отфильтровать.

  4. Наконец, мы говорим pcap ввести его основной цикл выполнения. В этом состоянии pcap ожидает, пока не получит столько пакетов, сколько мы хотим. Каждый раз, когда он получает новый пакет, он вызывает другую функцию, которую мы уже определили.

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

  5. После того, как наши потребности в нюхании удовлетворены, мы закрываем нашу сессию и завершаем.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .