不要在网上找一些没有用的代码,因为我已经在网上翻个遍都只能获得内网的IP。如果你的代码能给出代码获得外网IP马上结贴给分。

解决方案 »

  1.   

    在公网搞一个服务器,提供最简单的ASP代码即可<%
    userip = Request.ServerVariables("HTTP_X_FORWARDED_FOR")
    if userip = "" Then userip = Request.ServerVariables("REMOTE_ADDR")
    Response.Write(userip)
    %>代码访问之~没其他办法了~再问N次都是这样的
      

  2.   

    这个是ASP代码啊。这个可以应用到delphi中吗
      

  3.   

    http://vod.lovemz.com/u/mzwb/archives/2007/21.html
    没试过
      

  4.   

    第一种方式:
    procedure TForm1.FormCreate(Sender: TObject); 
    Var 
       WSAData:TWSAData; 
    begin 
       if WSAStartup(MAKEWORD(2,0),WSAData)<>0 then 
       showmessage('载入winsock dll失败'); 
    end; procedure TForm1.FormDestroy(Sender: TObject); 
    begin 
      WSACleanUP; 
    end; procedure TForm1.Button1Click(Sender: TObject); 
    var 
       Host: pHostent; 
       str:String; 
    begin 
         Host := GetHostByName(PChar('www.baidu.com'));      if Host=NIL then 
         begin 
            showmessage('网络出错'); 
            exit; 
         end; 
         str:=Copy(Host.h_addr^,0,4); 
         showmessage(Format('%d.%d.%d.%d', 
                                  [ord(str[1]), 
                                   ord(str[2]), 
                                   ord(str[3]), 
                                   ord(str[4])])); end; 
    第二种方式:
    unit Unit1; interface uses 
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, 
      Dialogs, StdCtrls,winsock; 
    const 
         WM_zhenghai = WM_USER+100; 
    type 
      TForm1 = class(TForm) 
        Button1: TButton; 
        Button2: TButton; 
        procedure FormCreate(Sender: TObject); 
        procedure FormDestroy(Sender: TObject); 
        procedure Button1Click(Sender: TObject); 
        procedure Button2Click(Sender: TObject); 
      private 
        { Private declarations } 
        procedure WMzhenghai(var message:Tmessage);Message WM_zhenghai; 
      public 
        { Public declarations } 
      end; var 
      Form1: TForm1; 
      buf:HOSTENT; 
      hAsyncTaskHandle:THandle; 
    implementation {$R *.dfm} procedure Tform1.WMzhenghai(var message:Tmessage); 
    begin 
    if buf.h_addr=NIL then 
       Begin 
            showmessage('获取不到IP'); 
            exit; 
       end; 
    showmessage(Format('%d.%d.%d.%d', 
                           [ord( buf.h_addr^[0]), 
                           ord(buf.h_addr^[1]), 
                           ord(buf.h_addr^[2]), 
                           ord(buf.h_addr^[3])])); 
    end; procedure TForm1.FormCreate(Sender: TObject); 
    Var 
       WSAData:TWSAData; 
    begin 
        if (WSAStartup(MAKEWORD(2,0),WSAData)<>0) then 
            raise Exception.Create('载入动态连接库winsock dll失败'); 
    end; procedure TForm1.FormDestroy(Sender: TObject); 
    begin 
       WSACleanUP; 
    end; procedure TForm1.Button1Click(Sender: TObject); 
    begin 
        hAsyncTaskHandle:=WSAAsyncGetHostByName(Handle,WM_zhenghai,pchar('www.baidu.com'),pchar(@buf),MAXGETHOSTSTRUCT); 
    end; procedure TForm1.Button2Click(Sender: TObject); 
    begin 
       WSACancelAsyncRequest(hAsyncTaskHandle); 
    end; end. 
      

  5.   

    to xixuemao 
    你的方法我早就试了N多次。。都是无法获取IP
      

  6.   

    呼叫: http://ip.lk52.com/ipfrom.asp
    取返回值
      

  7.   

    to xiezhenghai是的。。你在局域网里面试试。。就发现了
     
    to sandal 你发的是ASP的。我要的是delphi代码呀
      

  8.   

    to aries_jo  :摆渡这样跟我是属于内网还是外网
      

  9.   

    to xiezhenghai
    当然是外网了你用珊瑚QQ看到你的IP就是外网IP了
      

  10.   

    首先,你必须找到一个能够提供检测IP的网站。
    比如 http://www.ahjoe.com/count10/ip.asp
      

  11.   

    <%
    userip = Request.ServerVariables("HTTP_X_FORWARDED_FOR")
    if userip = "" Then userip = Request.ServerVariables("REMOTE_ADDR")
    Response.Write(userip)
    % > 
    // 下面是你要的delphi的,不过需要上面的配合。begin
    idhttp.get('web_page_addr');
    reuslt := idhttp.body;
    end;
      

  12.   


    ///////////////
    function GetIP(const Url: string):string;
    /////
    begin 
    idhttp.get(Url); 
    reuslt := idhttp.body; 
    end;///////////////yourip:=GetIP('http://www.bliao.com:2000/ip.phtml');
    ////////这个绝对好用--,,只要是不访问外网,其他的都是扯淡
      

  13.   

    to Adayuer  你给的代码.我还要在电脑上装asp环境.这样根本不人性化
    to colorfoxsong 你这个代码是取带域名服务器的.都不和我的需求啊..难道我每个客户端都要做个域名.大家还有没有直接在代码里面获取的
     
      

  14.   


    试试这个
    procedure Tform1.Button5Click(Sender: TObject);
    ////////这个绝对好用--,,只要是不访问外网,其他的都是扯淡
    //你加入一个idhttp控件
    begin
    showmessage(idhttp1.get('http://www.bliao.com:2000/ip.phtml '));
    end;
      

  15.   

    其实,一个软件在内部转来转去,是不能看到外面的ip
    你要是有服务器,下面的也是,
    n:=socket.RemoteAddress;////这里是真实ip---socket:是客户来的cs
      

  16.   

    to colorfoxsong 
    以下代码是服务器端,当客户端运行代码的时候以下代码可以获取客户端IP外网.
    procedure TSocketForm.AddClient(Thread: TServerClientThread);
    var
      Item: TListItem;begin
      Item := ConnectionList.Items.Add;
      Item.Caption :=' '+IntToStr(Thread.ClientSocket.LocalPort);
      Item.SubItems.Add('未登陆');
      Item.SubItems.Add(Thread.ClientSocket.RemoteAddress);以下代码是在服务器端的TRemoteDataModule窗体里,但是,当用户登陆的时候.运行到RemoteAddress时候出错"灾难性故障"procedure TRDM_com.AddLoginUser(const loginpost,loginuser,loginaddress,loginhost,logindate: WideString);
    var
      i: integer;
      Thread: TServerSocket;
      s:string;
    begin
      Thread.Socket.RemoteAddress;
      

  17.   

    看来俺是白说了~没看懂偶的意思?只有在公网搞一个服务器,连接上去,然后让它告诉你外网IP,除此之外,全是扯谈, 这个就是答案没其他办法了~再问N次都是这样的!!!!ASP的Web服务器容易找到而已~
      

  18.   

    必须是用asp代码才可以获得?
      

  19.   

    我看够垃圾的是楼主自己。ly_liuyang、xzhifei等很多DX都给出了原理。ahjoe、colorfoxsong等很多DX还给出了可行的代码。而楼主呢,连个HTTP都没弄明白也想搞网络?