Доброго времени суток. Сейчас вот по долгу службы надо написать сниффер, точнее на сетевом уровне снимать пакеты с сетевой карти и передавать заголовки пакетов в базу данных. Зачем изобретать велосипед, скачал сэмпл по работе с сокетами для перехвата. НО никак не могу разобраться с ошибкой, которая возникла из-за разных версий програмной среды, в частности пишет несовместимость типов PChfr и PAnsiChar как бороться с этим? У меня RadStudio 2010 а исходники, так понимаю на делфи 7 сделаны. Как быть? Подскажите, а то мой недалёкий мозк уже неделю как кипит. Уже пробовал работать и с драйвером winpicap но там вообще дебри в которых заблудиться раз плюнуть.
Код | // инициализируем WinSock Result := WSAStartup(WSA_VER, WSA) = NOERROR; if not Result then begin LogData := 'Ошибка: ' + SysErrorMessage(WSAGetLastError); Synchronize(ShowPacket); Exit; end; // создаем сокет hSocket := socket(AF_INET, SOCK_RAW, IPPROTO_IP); if hSocket = INVALID_SOCKET then begin DeInitSocket(WSAGetLastError); Exit; end; FillChar(Addr_in, SizeOf(sockaddr_in), 0); Addr_in.sin_family:= AF_INET; // указываем за каким интерфейсом будем следить Addr_in.sin_addr.s_addr := inet_addr(Pchar(Host)); //Ошибка тут! Несовместимость типов. // связываем сокет с локальным адресом if bind(hSocket, Addr_in, SizeOf(sockaddr_in)) <> 0 then begin DeInitSocket(WSAGetLastError); Exit; end; // Переключаем интерфейс на прием всех пакетов проходящих через интерфейс - promiscuous mode. PromiscuousMode := 1; if ioctlsocket(hSocket, SIO_RCVALL, PromiscuousMode) <> 0 then begin DeInitSocket(WSAGetLastError); Exit; end; Result := True; end;
|
|