Открытие сокета в системе

Тема в разделе "WASM.NETWORKS", создана пользователем idiMAN, 28 мар 2006.

  1. idiMAN

    idiMAN New Member

    Публикаций:
    0
    Регистрация:
    28 мар 2006
    Сообщения:
    3
    Адрес:
    Russia
    Есть ли способ отследить открытие сокета в системе? Интересует что-то вроде hook на открытие сокета. Это нужно мне для того, чтобы вычленить из общего сетевого трафика трафик определённого приложения.
     
  2. KiNDeR

    KiNDeR New Member

    Публикаций:
    0
    Регистрация:
    13 июн 2003
    Сообщения:
    258
    Адрес:
    Russia
    на sysinternals.com за исходниками netstat или за на http://sf.net/projects/tdifw за исходниками tdifw
     
  3. idiMAN

    idiMAN New Member

    Публикаций:
    0
    Регистрация:
    28 мар 2006
    Сообщения:
    3
    Адрес:
    Russia
    На sysinternals есть только исходники http://www.sysinternals.com/Files/NetstatpSource.zip, а вних используются AllocateAndGetTcpExTableFromStack и AllocateAndGetUdpExTableFromStack, а они просто дают список открытых портов, а не факт открытия порта приложением.
     
  4. EvilsInterrupt

    EvilsInterrupt Постигающий азы дзена

    Публикаций:
    0
    Регистрация:
    28 окт 2003
    Сообщения:
    2.428
    Адрес:
    Russia
    idiMAN

    Сканирование порта на петлевой интерфейс?
    Код (Text):
    1. Заменить Конец_домена_портов на 65536;
    2.  
    3. Символ БуферОткрытыхПортов[Конец_домена_портов];
    4.  
    5. Для И = 0 до Конец_домена_портов
    6. Начало
    7.     ОткрытьПорт("И");
    8.     Если Порт "И"
    9.         БуферОткрытыхПортов[И] = Истинна;
    10. Конец
    11.  
    12. Вывод(Конец_домена_портов);
    Если че я седня от билдера такой! :))
     
  5. idiMAN

    idiMAN New Member

    Публикаций:
    0
    Регистрация:
    28 мар 2006
    Сообщения:
    3
    Адрес:
    Russia
    EvilsInterrupt

    Нет, не то. Я взял пакетный фильтр WinPkFilter c www.ntkernel.com и должен анализировать траффик конкретного приложения. Я получаю весь трафик идущий от приложений на сетевой интерфейс и от сетевого интерфейса к приложениям. Мне нужно из общего потока вычленить только пакеты отправленные нужным приложением (известен его PID) и пакеты, идущие этому приложению. Если со вторым более менее всё понятно, к.т. приложением уже открыт сокет, а следовательно я могу с помощью функций AllocateAndGetTcpExTableFromStack и AllocateAndGetUdpExTableFromStack провести соответствие "порт пришедшего пакета" -> PID процесса, то при отправке приложением UDP-пакета с помощью sendto, я такого соответствия провести не могу, т.к. вышеупомянутые функции не возвращают данные об открытом этим приложением UDP порте. Выходом вижу по аналогии с TDIMon от sysinternals.com, перехватывать запросы к TDI и по ним уже смотреть с какого порта уходят пакеты, отправленные данным приложением.

    1) Вопрос только как это реализовать?

    2) И ещё ковыряя TDIMon увидел, что драйвер находится у него ресурсах exe-файла. Как он грузит его из памяти не сохраняя на винт?