通过域名 怎样取其IP地址

解决方案 »

  1.   

    uses 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;
      

  2.   

    procedure StartTracert(Ip : string;log : TStrings);
    var
      WSAData:TWSAData;
      dwAddr:integer;
      hp:phostent;
    begin
      //init winsock dll
      if (WSAStartup(MAKEWORD(2,0),WSAData)<>0) then
        raise Exception.Create('Winsock Version Error');
      ZeroMemory(Addr(dwAddr),sizeof(dwAddr));
      //resolve IP
      //convert form dotted address
      dwAddr:=inet_addr(pchar(Ip));
      if (dwAddr=INADDR_NONE) then
      begin
        hp:=gethostbyname(pchar(Ip));
        if hp = nil then
        begin
          log.Add('Failed to resolve host IP');
          exit//Failed to resolve host;
        end
        else
          CopyMemory(Addr(dwAddr),hp.h_addr^,hp.h_length);
      end;
      log.Add(Format('Resolve Target: %d.%d.%d.%d',[LoByte(LoWord(dwAddr)),
      HiByte(LoWord(dwAddr)),
      LoByte(HiWord(dwAddr)),
      HiByte(HiWord(dwAddr))]));
      WSACleanUP;
    end;
      

  3.   

    TO :Mag1cD(Magic.D)
        你这是在局域网内通过机器名 返回IP,
        我是要在广域网内通过域名,获其IP
      

  4.   

    通过域名获得IP
    function GetHostIP(HostName: String): String;
    var
       buf:pChar;
       iWsaRet:Integer;
       Data:WSAData;
       hostent:PHostEnt;
    begin
       Result := '';
       iWsaRet := WSAStartup($101,Data);
       if iWsaRet<>0 then
       begin
          ShowMessage('Socket initialize error!');
          Exit;
       end;
       buf := Allocmem(60);
       strcopy(buf,PChar(HostName));
       if Trim(buf)='' then
          gethostname(buf,60);
       hostent := gethostbyname(buf);
       Freemem(buf,60);
       if hostent=nil then
          Exit;
       Result  := inet_ntoa(pinAddr(hostent^.h_addr^)^);
       WSACleanup();
    end;
    通过IP获得计算机名
    function GetDomainName(Ip: string): string;
    var
      pH                : PHostent;
      data              : twsadata;
      ii                : dword;
    begin
      WSAStartup($101, Data);
      ii := inet_addr(pchar(ip));
      pH := gethostbyaddr(@ii, sizeof(ii), PF_INET);
      if (ph <> nil) then
        result := pH.h_name
      else
        begin
          result := '未知的计算机';
        end;
      WSACleanup;
    end;
      

  5.   

    TO:hellolongbin(一个人)
     域名:www.google.com    返回:‘’
      

  6.   

    uses winsock;function GetIP(Name:string) : string;
    type
      TaPInAddr = array [0..10] of PInAddr;
      PaPInAddr = ^TaPInAddr;
    var
      phe :PHostEnt;
      pptr : PaPInAddr;
      I : Integer;
      GInitData : TWSADATA;
    begin
      WSAStartup($101, GInitData);
      Result := '';
      phe :=GetHostByName(pchar(Name)); //返回一个指向主机信息结构的指针
      pptr := PaPInAddr(Phe^.h_addr_list); //强制转换
      result:=StrPas(inet_ntoa(pptr^[0]^));//返回一个点分形式的字符串IP地址
      WSACleanup;
    end;procedure TForm1.Button1Click(Sender: TObject);
    begin
       showmessage(GetIP('www.google.com'));  //得到的IP:64.233.189.104end;Winxp+Delphi7测试通过~~~
      

  7.   

    描述一个将主机名解释成IP地址的函数 
    -------------------------------------------
    在use子句声明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;
    ................................
    你可以这样试用这个功能:在form上放置EditBox、一个按钮和一个标签,在把代码加到按钮的OnClick事件上procedure TForm1.Button1Click(Sender: TObject);
    var
    IP: string;
    begin
    if HostToIp(Edit1.Text, IP) then Label1.Caption := IP;
    end;
      

  8.   

    多谢各位的帮忙!
    回各位:以上方法都能通过计算机名取回IP,但通过域名却不行,我用Delphi win200,且用在cmd下
    ping www.google.com 提示 ‘Unknow host www.google.com’,能上网为什么PING不通?
      

  9.   

    procedure TForm1.Button1Click(Sender: TObject);
    type
      //copy the add_list
      TAddrList = array [0..20] of PInAddr;
      PAddrList = ^TAddrList;
    var
      phent : PHostEnt;
      P: PAddrList;
      I : Integer;
    begin
       //detect yahoo.com
       phent := GetHostByName(pchar(edit1.text));
       if phent<>nil then
         begin
            I := 0;
            P := PAddrList(phent^.h_Addr_list);
            while P[I] <> nil do
            begin
                listbox1.items.Add(StrPas(inet_ntoa(P[I]^)));
                Inc(I)
            end
        end;
    end;
      

  10.   

    procedure TForm1.Button1Click(Sender: TObject);
    type
      //copy the add_list
      TAddrList = array [0..20] of PInAddr;
      PAddrList = ^TAddrList;
    var
      phent : PHostEnt;
      P: PAddrList;
      I : Integer;
      WSAData : TWSAData;
    begin
       if (WSAStartup(MAKEWORD(2,0),WSAData)<>0) then
            raise Exception.Create('Winsock Version Error');   //detect yahoo.com
       phent := GetHostByName(pchar(edit1.text));
       if phent<>nil then
         begin
            I := 0;
            P := PAddrList(phent^.h_Addr_list);
            while P[I] <> nil do
            begin
                listbox1.items.Add(StrPas(inet_ntoa(P[I]^)));
                Inc(I)
            end
        end;
        WSACleanUP;
    end;
      

  11.   

    hellolongbin(一个人)的就行
    www.google.com-----64.233.189.104