首页  编辑  

将某一主机域名解析为IP地址

Tags: /超级猛料/Network.网络通讯/TCP_IP/   Date Created:

将某一主机域名解析为IP地址。

使用 WinSock 单元;

过程如下:

function HostToIP(Name: string; var Ip: string): Boolean;

var

 wsdata : TWSAData;

 hostName : array [0..255] of char;

 hostEnt : PHostEnt;

 addr : PChar;

begin

 WSAStartup ($0101, wsdata);

 try

   gethostname (hostName, sizeof (hostName));

   StrPCopy(hostName, Name);

   hostEnt := gethostbyname (hostName);

   if Assigned (hostEnt) then

     if Assigned (hostEnt^.h_addr_list) then begin

       addr := hostEnt^.h_addr_list^;

       if Assigned (addr) then begin

         IP := Format ('%d.%d.%d.%d', [byte (addr [0]),

         byte (addr [1]), byte (addr [2]), byte (addr [3])]);

         Result := True;

       end

       else

         Result := False;

     end

     else

       Result := False

   else begin

     Result := False;

   end;

 finally

   WSACleanup;

 end

end;

测试时请在在线状态。

测试代码:

var

IP: string;

DNS: string;

begin

 DNS := InputBox('输入DNS域名', '主机名称:', '');

 if HostToIp(DNS, IP) then showmessage(IP);

end;

作者:Latfi Baran

我测试Kingron给出的用法时,hostEnt老是=nil。

后来我在用gethostbyname(...)之前,加入WSAStartup(...),终于一切OK。

Winsock单元中没有getaddressbyname()