Sources
Delphi Russian Knowledge Base
DRKB - база знаний по Дельфи в рунете, составленная Виталием Невзоровым

Как по IP адресу получить Hostname (и обратно)?

01.01.2007
Alex Konshin (StayAtHome), alexk@msmt.spb.su

function TGenericNetTask.GetPeerOrigin( const ALogin : String ) : DWORD;
const AddressStrMaxLen = 256;
var len : DWORD;
    ptr : PChar;
    pHE : PHostEnt;
    addr : TSockAddr;
    buf : Array [0..AddressStrMaxLen-1] of Char;
begin
   if FNet=nil then raise ESocketError.Error(-1,ClassName+
               '.GetPeerAds: Net is not defined',WSAHOST_NOT_FOUND);
   len := SizeOf(TSockAddr);
   if getpeername(FSocket,addr,len)<>0 then
       RaiseLastSocketError(-1,ClassName+
                            '.GetPeerAds: getpeername()');
   case addr.sin_family of
       AF_INET: // TCP/IP
       begin
           pHE := gethostbyaddr( PChar(@addr.sin_addr), SizeOf(TInAddr),
                  AF_INET );
           if pHE=nil then RaiseLastSocketError(-1,ClassName+
                           '.GetPeerAds: gethostbyaddr()');
           FPeerNodeName := pHE^.h_name;
           if FNet.NodeByName(FPeerNodeName)=nil then
           begin
               ptr := StrScan(pHE^.h_name,'.');
               if ptr<>nil then
                   FPeerNodeName := Copy(pHE^.h_name,1,ptr-pHE^.h_name);
           end;
       end;

   else
       len := AddressStrMaxLen;
       if WSAAddressToStringA(sin,sinlen,nil,buf,len)<>0 then
         RaiseLastSocketError(-1,ClassName+'.GetPeerAds: WSAAddressToStringA()');
       ptr := StrRScan(buf,':');
       if ptr<>nil then len := ptr-buf;
       FPeerNodeName := Copy(buf,1,len);
   end;
   Result := FNet.EncodeAddress(ALogin,FPeerNodeName,'',
             [bLoginIdRequired,bNodeIdREquired,bRaiseError]);
end; {TGenericNetTask.GetPeerOrigin}

--
Alex Konshin
mailto:alexk@msmt.spb.su
(2:5030/217)

Previous page:
Смена IP-адреса
Top:
DRKB
Next page:
Получение IP-адреса и маски для всех сетевых интерфейсов