Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[18.226.185.103] |
|
Сообщ.
#1
,
|
|
|
Снифер на 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; } } |