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

zklient

New Member
02.06.2008
2
0
#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;
}
}