Перехват локального траффика?

Тема в разделе "WASM.WIN32", создана пользователем test555, 20 сен 2008.

  1. test555

    test555 New Member

    Публикаций:
    0
    Регистрация:
    7 дек 2007
    Сообщения:
    241
    Стоит задача перехватывать входящий/исходящий трафик на раб. станции.
    В целях мониторинга и аудита.

    Вопрос: с чего начать, что изучить, какие способы наиболее правильные и удобные?

    (Возможно ли воспользоваться статьями МС-РЕМа по перехвату АПИ ? (часть 1.. еще стоит разобраться со второй))

    Для примера: требуется перехвать letnet-сессию.

    Спасибо за ссылки, советы, названия книжек.

    ПС: пишу на делфе, АСМ почти не знаю.. Можно С++ примеры, разберусь.
     
  2. 2FED

    2FED New Member

    Публикаций:
    0
    Регистрация:
    20 фев 2008
    Сообщения:
    1.002
    Перехватывай функции WinSock
     
  3. test555

    test555 New Member

    Публикаций:
    0
    Регистрация:
    7 дек 2007
    Сообщения:
    241
    WSAConnect Function и тому подобные?

    Потомчнее?
    Поискал мсдм по функциям
    ZwListenPort
    ZwConnectPort и нифига не нашлось...

    Я думал что они по аналогии - базовые
     
  4. blast

    blast New Member

    Публикаций:
    0
    Регистрация:
    8 мар 2008
    Сообщения:
    170
    Посмотри под дизасмом функции WSAxx
     
  5. ECk

    ECk Member

    Публикаций:
    0
    Регистрация:
    9 апр 2004
    Сообщения:
    454
    Адрес:
    Russia
    Winsock LSP (Layered Service Provider - смотри msdn, там есть сорец и внятный документ)
     
  6. satrau

    satrau Александр

    Публикаций:
    0
    Регистрация:
    5 янв 2008
    Сообщения:
    229
    еще стоит попробовать Etheral.
    http://www.wireshark.org/
     
  7. 2FED

    2FED New Member

    Публикаций:
    0
    Регистрация:
    20 фев 2008
    Сообщения:
    1.002
    test555
    ZwListenPort
    ZwConnectPort

    это совсем не те порты что ты думаешь.

    где перехватываешь то, r0?
     
  8. test555

    test555 New Member

    Публикаций:
    0
    Регистрация:
    7 дек 2007
    Сообщения:
    241
    Перехватываю в юзермод, хочу сделать так же, как это делал МС-РЕМ в своей первой статье по перехвату.

    Да, дизасмить я не умею.. Думал что внятно про АСМ написал.
     
  9. test555

    test555 New Member

    Публикаций:
    0
    Регистрация:
    7 дек 2007
    Сообщения:
    241
    WSAConnect
    Вообщем думаю что начну изучение с этой функции..

    Спасибо всем, но тема не закрыта..
     
  10. test555

    test555 New Member

    Публикаций:
    0
    Регистрация:
    7 дек 2007
    Сообщения:
    241
    Народ, тема все еще актуальна..

    Только теперь мне интересно, как хватать трафик в драйвере..

    (уже почти готов аналог файлового монитора, ведется перехват ntOpenfile и тд..
    )
    А какие функции хватать чтобы перехватывать трафик?
    Для примера надо перехватить сеант FTP или SMTP

    C чего начать изучение?
     
  11. perez

    perez Member

    Публикаций:
    0
    Регистрация:
    25 апр 2005
    Сообщения:
    502
    Адрес:
    Moscow city
    На этом сайте есть исходник драйвера, работающего с ipfilter (кажется так) винды, но только под NT.
    Очень давно писал считалку трафика с пом. него.

    edited

    http://www.wasm.ru/search/search.php?stpos=0&query=ipfilter&stype=AND
     
  12. necrostaz

    necrostaz New Member

    Публикаций:
    0
    Регистрация:
    19 апр 2008
    Сообщения:
    17
    как здесь уже писали, юзай LSP...это просто, дешево и сердито

    вняиный пример и описание технологии здесь http://www.komodia.com/index.php?page=lsp.html,
    как альтернативный вариант можно реализовать NDIS драйвер, у Хоглунда неплохо написано по теме, а с перехватом здесь лучше не заморачиваться имхо
     
  13. steelfactor

    steelfactor New Member

    Публикаций:
    0
    Регистрация:
    26 апр 2007
    Сообщения:
    501
    может пригодится
    Код (Text):
    1. #include <stdafx.h>
    2. #include <winsock2.h>
    3. #include <mstcpip.h>
    4.  
    5. // Буфер для приёма данных
    6. #define MAX_PACKET_SIZE  65535
    7. static BYTE Buffer[MAX_PACKET_SIZE];
    8.  
    9. int _tmain(int argc, _TCHAR* argv[])
    10. {
    11.   WSADATA     wsadata;    // Инициализация WinSock.
    12.   SOCKET      RawSocket;  // Cлущающий сокет.
    13.   unsigned long       flag = 1;  // Флаг PROMISC Вкл/выкл.
    14.  
    15.   // Инициализация WS2_32
    16.   WSAStartup(MAKEWORD(2,2), &wsadata);
    17.   // Создание RAW-сокета
    18.   RawSocket = socket( AF_INET, SOCK_RAW, IPPROTO_IP );
    19.  
    20.   // Определение имени хоста
    21.   char        HostName[256];
    22.   gethostname(HostName, sizeof(HostName));
    23.   printf("HostName = %s \n", HostName);
    24.  
    25.   // Определение информации по имени хоста
    26.   PHOSTENT   pLocalHostEnt;      
    27.   pLocalHostEnt = gethostbyname(HostName);
    28.  
    29.   // Подготовка структуры SockAddr с адресом хоста
    30.   SOCKADDR_IN SockAddr;        
    31.   ZeroMemory(&SockAddr, sizeof(SockAddr));
    32.   SockAddr.sin_family = AF_INET;
    33.   SockAddr.sin_addr.s_addr = ((in_addr *)pLocalHostEnt->h_addr_list[0])->s_addr;
    34.   // Привязка
    35.   bind(RawSocket, (SOCKADDR *)&SockAddr, sizeof(SOCKADDR));
    36.  
    37.   // Переключение сетевой карты в "promiscuous mode" для захвата всех пакетов
    38.   ioctlsocket(RawSocket, SIO_RCVALL, &flag);
    39.  
    40.   // Приём IP-пакетов.
    41.   while( true )
    42.   {
    43.  
    44.     int count;
    45.  
    46.     count = recv( RawSocket, (char *)Buffer, sizeof(Buffer), 0 );
    47.     printf("Len = %d \n", count);
    48.  
    49.     // --- код для обработки и записи захваченного IP-пакета ---
    50.   }
    51.  
    52.   closesocket(RawSocket);
    53.   WSACleanup();
    54. }