1. Набираем команду codeby webinar. Набираем команду для организации и проведения вебинаров. Подробнее ...

    Скрыть объявление
  2. Требуются разработчики и тестеры для проекта codebyOS. Требования для участия в проекте: Знание принципов работы ОС на базе Linux; Знание Bash; Крайне желательное знание CPP, Python, Lua; Навыки системного администрирования. Подробнее ...

    Скрыть объявление
  3. Получи 30.000 рублей. Для получения денег необходимо принять участие в конкурсе авторов codeby. С условиями и призами можно ознакомиться на этой странице ...

    Внимание! Регистрация авторов на конкурс закрыта.

    Скрыть объявление

Снифер на C# с Raw сокетом ловит не все пакеты, пропускает часть трафи

Тема в разделе ".NET - программирование", создана пользователем zklient, 2 июн 2008.

  1. zklient

    zklient New Member

    Репутация:
    0
    Регистрация:
    2 июн 2008
    Сообщения:
    2
    Симпатии:
    0
    Снифер на C# с Raw сокетом ловит не все пакеты.
    Копирую фильм по сети а снифер (только считает количество пакетов и объём переданных данных) неправильно указывает объём сетевого трафика и количество пакетов (кол-во проверяю по данным в состоянии сетевого интерфейса). Может кто встречался с таким глюком?

    Фрагмент кода:
    Код:
    FmainSocket = new Socket( AddressFamily.InterNetwork, SocketType.Raw, ProtocolType.IP );
    FmainSocket.Bind( new IPEndPoint( IPAddress.Parse( FcaptureIP ), 0 ) );
    FmainSocket.SetSocketOption( SocketOptionLevel.IP, SocketOptionName.HeaderIncluded, true );
    byte[] byTrue = new byte[4] { 1, 0, 0, 0 };
    byte[] byOut = new byte[4];
    FmainSocket.IOControl( IOControlCode.ReceiveAll, byTrue, byOut );
    FmainSocket.BeginReceive( FreceiveBuf, 0, FreceiveBuf.Length, SocketFlags.None, new AsyncCallback( OnReceive ), null );
    
    private void OnReceive ( IAsyncResult _ar ) {
    int vReceived = FmainSocket.EndReceive( _ar );
    byte[] vReceiveBuf = FreceiveBuf;
    // отпарсить принятое
    ParseData( vReceiveBuf, vReceived );
    FreceiveBuf = new byte[CmaxPacketSize];
    FmainSocket.BeginReceive( FreceiveBuf, 0, FreceiveBuf.Length, SocketFlags.None, new AsyncCallback( OnReceiv ), null );
    }
    
    
    private void ParseData ( byte[] _receiveBuf, int _Received ) {
    lock(this){
    CapturedPackets++;
    CapturedBytes += _Received;
    }
    }
     
Загрузка...
Похожие Темы - Снифер на Raw
  1. Karatist
    Ответов:
    0
    Просмотров:
    19
  2. Karatist
    Ответов:
    4
    Просмотров:
    57
  3. D3ad ARbuZzz
    Ответов:
    0
    Просмотров:
    107
  4. никитан10
    Ответов:
    8
    Просмотров:
    90
  5. grayuser
    Ответов:
    6
    Просмотров:
    83

Поделиться этой страницей