解析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;
******************************
//uses winsock; 通过IP地址得到机器名
function iptoname(ip:string):string;
var
WSAData:TWSAData;
p
HostEnt;
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报文,远程机器会返回
数据,其中就有远程机器的当前用户名,机器名称等信息,但如何具体实现我就不太清楚了