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

Previous  Top  Next

    
 

 

 

Code:

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,bR

aiseError]);

end; {TGenericNetTask.GetPeerOrigin}

 

 

 

 

Alex Konshin

mailto:alexk@msmt.spb.su"

(2:5030/217)

 

©Drkb::03353

Автор: StayAtHome

Взято с Vingrad.ru http://forum.vingrad.ru