С# Как мне перехватить все пакеты и узнать IP-адреса через перехват?

Собственно у меня три вопроса:

1- Согласно ответу Назара Гринко, мне поможет только перехват трех функций (отправить, получить и подключиться). предвидеть весь пакет в моей машине?

2- Если я подключил три функции, как получить IntPtr, который указывает на структуру sockaddr из собственной функции P/Invoked?

3- Send и recv не имеют sockaddr, так как же выяснить адреса?

Заранее спасибо.


person user3312744    schedule 15.10.2015    source источник
comment
Мониторинг всего трафика на машине сложнее, чем перехват трех функций из кода пользовательского режима. Это нужно будет сделать в режиме ядра. Значит водитель. Не что-то для С#.   -  person David Heffernan    schedule 15.10.2015
comment
@DavidHeffernan, как насчет Easyhook и deviare, они для C #. Другое дело, не лучше ли перейти на инструменты захвата пакетов вроде SharpPcap. или придерживайтесь крючка.   -  person user3312744    schedule 15.10.2015
comment
Я думал, вы сказали, что хотите обнаружить все пакеты на машине. Вы не собираетесь делать это из настольного приложения, работающего в контексте пользователя.   -  person David Heffernan    schedule 15.10.2015
comment
@DavidHeffernan Я новичок в этих вещах, так что не могли бы вы объяснить это подробнее и что мне делать. Моя цель - отслеживать сетевой трафик для всех процессов на моей машине (исходящий или входящий). Я начал с Pcap (sharppcap), но он захватывает пакеты, не зная, как процесс их получает или отправляет, я попытался получить номер порта из заголовков и выполнить netstate, но все же не все пакеты могут быть связанный с процессом. Итак, я перешел к перехвату, перехватив все системные вызовы, которые приводят к сетевым пакетам, которые, как я думал, могут достичь моей цели.   -  person user3312744    schedule 18.10.2015


Ответы (1)


  1. Описанные вами функции являются частью стандарта POSIX. Это означает, что когда вы используете эти функции в Windows, вы на самом деле вызываете оболочку, которая в конечном итоге преобразуется в системный вызов . Вы можете отправлять пакеты без использования этой функции (например, с помощью Windows API).

  2. Смотрите ответ номер один. Это тебе не поможет. Вы также должны предоставить хук для всех процессов.

  3. Описываемые вами функции используют дескриптор файла, который представляет собой конструкцию POSIX и моделируется в пользовательском режиме на другие системы.

Для проверки вашего трафика вы должны использовать драйвер, который сделает это за вас. Возможно, вы захотите взглянуть на Pcap.Net, который представляет собой проект C#, нацеленный именно на вашу проблему, и предоставляет необходимый драйвер и API.

person Mark Segal    schedule 18.10.2015
comment
Я знаю pcap и другие драйверы, такие как sharppcap, ... и т. д., но моя цель - узнать процесс получения или отправки захваченного пакета, что было для меня сложно. Я попытался получить номер порта из заголовков (tcp и udp) и выполнить netstate, но не все пакеты могут быть связаны с процессом, только tcp и udp. - person user3312744; 19.10.2015