Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Сети > Разобраться с Rad Studio и её типами


Автор: 4Got 12.12.2012, 18:02
Доброго времени суток. Сейчас вот по долгу службы надо написать сниффер, точнее на сетевом уровне снимать пакеты с сетевой карти и передавать заголовки пакетов в базу данных. Зачем изобретать велосипед, скачал сэмпл по работе с сокетами для перехвата. НО никак не могу разобраться с ошибкой, которая возникла из-за разных версий програмной среды, в частности пишет несовместимость типов 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;

Автор: Coobick 12.12.2012, 18:13
Не совсем в тему.. переходи уж лучше сразу на ХЕ и "копай" на ней. Иначе после опять(ведь в скором времени всёравно обновиш) проблемы будут..не везде, но будут.

Ну и так, что мешает заменить "нужные" PChar на PAnsiChar? 

Автор: 4Got 12.12.2012, 18:22
С PAnsiChar компилируется но не работает, а качанная демка работает, но не компилируется. Мешает перейти купленная лицензия, не мной)))

Добавлено через 46 секунд
кому интересно, исходники могу скинуть.

Автор: Coobick 12.12.2012, 18:32
Ну пробуй так.. PAnsiChar(AnsiString(  smile 

Автор: CynicRus 13.12.2012, 08:26
Или же UniqueString(тут твой pchar);

Автор: 4Got 13.12.2012, 13:21
UniqueString(тут твой pchar);  - не работает...((((
А так PAnsiChar(AnsiString(         - компилируется, но опять таки не работает(((( Есть большое подозрение, что ни в этом дело. Ладно, всем огромное спасибо. тема закрыта.

Автор: Poseidon 14.12.2012, 08:15
Цитата(4Got @  13.12.2012,  13:21 Найти цитируемый пост)
компилируется, но опять таки не работает
А рабочий ли вообще код? Если его скомпилировать на D7, все нормально?

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)