Здравствуйте!
Вот этот код переводит интерфейс в 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.