小弟现正开发一个小型程序,需要获取机器的外网地址,各位大虾有知道的,帮帮忙哈,不胜感激。最好有delphi的代码。

解决方案 »

  1.   

    用GetHostByName获取HostEnt指针然后遍历其中所有地址
      

  2.   

    function GetServerIP(Str:String):String;
      var
       buff:PHostEnt;
      begin
       Result:='';
       try
       buff := GetHostByName(pchar(Str));
     Result:=Format('%d.%d.%d.%d',
     [ord(buff.h_addr^[0]),
     ord(buff.h_addr^[1]),
     ord(buff.h_addr^[2]),
     ord(buff.h_addr^[3])]);
       except   end;
      end;
      

  3.   

    取公网IP的地址 
    unit UnitIP;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient,
      IdHTTP, XPMan, StdCtrls, Buttons, ExtCtrls,WinInet;  {=======================================================
      DESIGN BY :  花好月圆 / 玉面书生
      DATE:        2005-01-27
      SITE:        http://www.eastrise.cn/quick2004
      BLOG:        http://blog.csdn.net/jackie168
      EMAIL:       [email protected]  文章为作者原创,转载前请先与本人联系,转载请注明文章出处、保留作者信息,谢谢支持!
    =======================================================}type
      TForm1 = class(TForm)
        Panel1: TPanel;
        BitBtn1: TBitBtn;
        XPManifest1: TXPManifest;
        IdHTTP1: TIdHTTP;
        procedure BitBtn1Click(Sender: TObject);
        procedure FormCreate(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;implementation{$R *.dfm}
    function ExtractStr(Str: string): string;  //格式字符串
    var i,j:integer;
    begin
      Result:='';
    j:=Length(str);
    for i:=0 to j do
    begin
    if str[i] in ['0'..'9','.'] then
    Result:=Result+str[i];
    end;
    end;function  IsInternet:  Boolean; //检查是否连上网络
    begin  
       if  InternetCheckConnection('http://www.eastrise.cn/ip.asp',  1,  0)  then
           Result  :=  True  
       else  
           Result  :=  False;  
    end;procedure TForm1.BitBtn1Click(Sender: TObject);
    begin
        if IsInternet then
        begin
        Panel1.Caption:='你的公网IP:'+
        ExtractStr(IdHTTP1.Get('http://www.eastrise.cn/ip.asp'));  //取IP地址
        end
        else
        application.MessageBox('该机器未连接网络或服务器出错!','错误',mb_ok+mb_iconerror);
    end;procedure TForm1.FormCreate(Sender: TObject);
    begin
      panel1.Caption:=''; //初始化
    end;end.
      

  4.   

    PHostEnt是自己定义的数据类型或者类吧,你这样我的机器上根本没有办法运行嘛。
      

  5.   

    如何得到本机在INTERNET的IP地址 
    提交日期:2003-8-28  
     
    关键词:INTERNETIP地址  
    procedure TForm1.Button1Click(Sender: TObject);
    var
    IPSTR, IP, HP: string;
    BeginIP, EndIP, i: integer;
    begin
    Button1.Enabled := False;
    HP :='http://www.nssoft.net';
    NMHTTP1.Get(HP);
    IPSTR := NMHTTP1.Body;
    BeginIP := Pos('BEGINIP', IPSTR) + Length('BEGINIP');
    EndIP := Pos('ENDIP', IPSTR);
    IP := '';
    for i := BeginIP to ENDip - 1 do
    begin
    IP := IP + IPstr[i];
    end;
    label1.Caption := IP;
    Button1.Enabled := True;
    end; 
      

  6.   

    需要取的是本机的IP地址,如果是已有域名的,我知道怎么做的,就是想问一下能否用delphi获得本机的外网IP,因为我们都是通过网关上网的,而机器的IP都是局域网内的,现在要获得外部的IP地址,有人跟我说过无法获得,除非别人告诉你,但是我们现在做的东西确实要用到,所以希望各位大哥能够提供一个好的办法。
      

  7.   

    需要通过外网服务器才能够知道网外ip,如果你没有自己的外网服务器,那么可以通过访问别人的服务器的网页来取得自己的网外ip,前提是这个网页中要有显示访问人ip的功能,这种网页网上有许多的,比如像大多数论坛中都有显示访问人ip的功能等,取网页ip地址的方法,上面已有几位朋友给出了源代码,我就不重复了,下面是你自己有外网服务器通过服务器程序去取得的方法:
    procedure TF_Main.ServerSocket1ClientRead(Sender: TObject;
      Socket: TCustomWinSocket);
    var
    begin
      showmessage(Socket.RemoteAddress);
    end;   
    很简单的吧