Я использую GetHostByName
, чтобы получить IP-адрес от хоста/DNS. У меня также есть Kaspersky Internet Security 2013 и заметил, что GetHostByName
получает его. Похоже, что мой процесс пытается создать подраздел в hklm\SYSTEM\CONTROLSET001\SERVICES\TCPIP\PARAMETERS
. Это на самом деле означает, что я НЕ МОГУ использовать эту функцию, если у пользователя нет прав администратора. Есть ли другой способ решения host/dns?Получить IP-адрес из DNS без GetHostByName
EDIT: Вот скриншот:
EDIT2: я использовал getaddrinfo и KIS не "обнаружить что-нибудь". Я бы хотел использовать его, но мне все равно понравилась бы поддержка Win2K.
EDIT3: Добавлена Debug ScreenShot
EDIT4: Это мой "Тест" Код:
program Project2;
{$APPTYPE CONSOLE}
uses
Winsock;
var
DummyWSA : WSADATA;
begin
if WSAStartup($0202, DummyWSA) = 0 then begin
GetHostByName ('localhost');
end;
readln;
end.
EDIT5: GetAddrInfo версия ...
program Project2;
{$APPTYPE CONSOLE}
uses
Winsock;
type
PAddrInfo = ^TAddrInfo;
TAddrInfo = packed record
ai_flags: Integer;
ai_family: Integer;
ai_socktype: Integer;
ai_protocol: Integer;
ai_addrlen: LongWord;
ai_canonname: Array of Char;
ai_addr: PSOCKADDR;
ai_next: PAddrInfo;
end;
function getaddrinfo(const nodename: PChar; const servname : PChar; const hints: PAddrInfo; var res: PAddrInfo): Integer; stdcall; external 'ws2_32.dll' name 'getaddrinfo';
procedure freeaddrinfo(ai: PAddrInfo); stdcall; external 'ws2_32.dll' name 'freeaddrinfo';
var
DummyWSA : WSADATA;
SocketHint : PAddrInfo;
SocketResult : PAddrInfo;
begin
if WSAStartup($0202, DummyWSA) = 0 then begin
//GetHostByName ('localhost');
getaddrinfo ('localhost', '80', SocketHint, SocketResult);
// getaddrinfo ('localhost', NIL, SocketHint, SocketResult); // Not sure if I can NIL the port...
end;
readln;
end.
Эта версия похоже, ничего не пишет в реестре ...
Если есть, у этого, вероятно, будет тот же конфликт с Kaspersky. Вы не можете вызвать GetHostByName как не-админ. Как выглядит стек вызовов? –
Вы * пробовали * используя эту функцию и видите, что она на самом деле * сбой *, вы просто * предполагаете *, что он будет терпеть неудачу на основании того, что вы читаете в этом стеке вызовов, который у вас есть? Потому что я могу сказать вам, что «GetHostByName» не ограничивается только учетными записями администратора. –
Я добавил скриншот «обнаружения». Предполагается, что вы можете писать только в HKLM, если у вас есть права администратора. –