Promisc mode вызывает глюк PERFMONa !?
От: Barvinok_UA  
Дата: 01.02.03 22:37
Оценка:
Здравствуйте!

Вот этот код переводит интерфейс в Promiscuous mode. Потом там ловятся IP пакеты — я поскипал. Всё работает замечательно, НО!!!
При этом если смотреть в PerfMon'e параметр "Bytes received/sec" и "Bytes send/sec" — начинает всякую пургу показывать. Типа ниоткуда берётся входящий траффик... Или например, тачка выполняет пинг 10000-байтным пакетом — скорость приёма и передачи показывает одинаковой, а если перевести в Promisc — приём (или передача — не помню точно) показывается в 2 раза больше. Что за х...я??? Где копать? Что читать? Куда смотреть?

{$APPTYPE CONSOLE}
program wcrt;

uses Winsock2; // WS2_32.DLL used

const IP_HDRINCL    = $02;
      IOC_VENDOR    = $18000000;
      IOC_IN        = $80000000;
      SIO_RCVALL    = IOC_IN or IOC_VENDOR or 1;

function WSAIoctl(
S                 : TSocket;
dwIOControlCode   : Cardinal;
InBuffer          : Pointer;
cbInBuffer        : Cardinal;
OutBuffer         : Pointer;
cbOutBuffer       : Cardinal;
VAR BytesReturned : Integer;
Overlapped,
OLComplRoutine    : Pointer
) : Integer; stdcall; external 'WS2_32.DLL' name 'WSAIoctl';

VAR WD : WSAData;
    SA : TSockAddr;
    SS : TSocket;
    Mode : Boolean = True;
    dummy : Integer;
begin
 WSAStartUp(02,WD);
 SS:=Socket(AF_INET,SOCK_RAW,IPPROTO_RAW);
 SA.sin_family:=AF_INET;
 SA.sin_port:=0;
 SA.sin_addr.S_addr:=inet_addr(PChar(ParamStr(1)));
 bind(SS,SA,SizeOf(SA));
 Writeln('Press Enter to set SIO_RCVALL'); Readln;
 WSAIoctl(SS,SIO_RCVALL,@Mode,SizeOf(LongBool),nil,0,dummy,nil,nil);
 Readln;
 WSACleanUp;
end.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.