Помощник
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
|
|
2:06:2008, 10:39
|
|
Новенький ![]() Группа: Новенький Сообщений: 1 Регистрация: 2:06:2008 Пользователь №: 17 750 Репутация: 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; } } |
|
Сообщение
#1
|
|
![]() |
|
Текстовая версия | Сейчас: 29:08:2008 - 01:23 |