首页  编辑  

解析IP地址为主机域名

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

解析IP地址为主机域名。

使用 WinSock 单元;

过程如下:

 function IPAddrToName(IPAddr : String): String;

 var

   SockAddrIn: TSockAddrIn;

   HostEnt: PHostEnt;

   WSAData: TWSAData;

 begin

   WSAStartup($101, WSAData);

   SockAddrIn.sin_addr.s_addr:= inet_addr(PChar(IPAddr));

   HostEnt:= gethostbyaddr(@SockAddrIn.sin_addr.S_addr, 4, AF_INET);

   if HostEnt<>nil then

   begin

     result:=StrPas(Hostent^.h_name)

   end

   else

   begin

     result:='';

   end;

 end;

测试时请在在线状态。

测试代码:

var

 Name: string;

begin

 Name := InputBox('输入对方主机IP', '主机IP地址:', '');

 showmessage(IpAddrToName(Name));

end;

作者:Latfi Baran

******************************

//uses winsock; 通过IP地址得到机器名

function  iptoname(ip:string):string;

var

  WSAData:TWSAData;

  p:PHostEnt;

  InetAddr:dword;

begin

  result:='''';

  WSAStartup(2,  WSAData);

  InetAddr:=  inet_addr(PChar(IP));

  try

  p:=GetHostByAddr(@InetAddr,  Length(IP),  PF_Inet);

  if p<> nil then result:=p^.h_name;

  except

    result:='''';

  end;

end;

这段代码我试过, 不过只对局域网的机器有效,对internet上的机器不行,且速度不太快

我有看到相关的资料,是通过udp协议,往远程机器的137端口发送UDP报文,远程机器会返回

数据,其中就有远程机器的当前用户名,机器名称等信息,但如何具体实现我就不太清楚了