小弟急需获得自己真实的IP地址,请大家多帮忙。

解决方案 »

  1.   

    procedure GetIPList(IPList: TStringList);
      type
        TaPInAddr = array [0..10] of PInAddr;
        PaPInAddr = ^TaPInAddr;
      var
        PHE: PHostEnt;
        PPtr: PaPInAddr;
        Buffer: array [0..63] of char;
        I: Integer;
        GInitData: TWSADATA;
      begin
        WSAStartup($101, GInitData);
        GetHostName(Buffer, SizeOf(Buffer));
        PHE := GetHostByName(Buffer);
        if not Assigned(PHE) then Exit;
        PPtr := PaPInAddr(PHE^.h_addr_list);
        I := 0;
        while pptr^[I] <> nil do
        begin
          IPList.Add(StrPas(inet_ntoa(PPtr^[I]^)));
          Inc(I);
        end;
        WSACleanup;
      end;
      

  2.   

    再把172.16/192.168/127/10开头的从IPList中去掉,剩下的就都是公网IP
      

  3.   

    请问 ehom(?!)  
    如果是在局域网里面, 如何获得服务器的isp分配的ip 呢?
      

  4.   

    欢迎加入Borland DELPHI女程序员,参与群里技术讨论!欢迎女孩子,也欢迎男孩子参与技术讨论!群号15154361
      

  5.   

    如果在局域网里面,ISP自然不会给你分配IP。可以通过主动连接外网计算机,由它返回你的网关IP。
      

  6.   

    to ehom(?!)
      "如果在局域网里面,ISP自然不会给你分配IP。可以通过主动连接外网计算机,由它返回你的网关IP。"
      这个了解, 就是比较麻烦,不知道怎么实现.如:怎么返回ISP分配给局域网服务器的ip 
      请指教 谢谢(解决后加帖给100分)
      

  7.   

    用asp + delphi
    这个ASP程序如下:
    <html>
    <%
    sip=Request.ServerVariables("LOCAL_ADDR")
    cip=Request.ServerVariables("REMOTE_ADDR")
    %>
    <body>
    IP=<%=cip%>
    </body>
    </html>调用:
    procedure TForm1.Button1Click(Sender: TObject);
    begin
       edit1.Text:=IdHTTP1.Get('http://www.eastrise.cn/ip.asp');
    end;
      

  8.   

    procedure GetIPList(IPList: TStringList);
      type
        TaPInAddr = array [0..10] of PInAddr;
        PaPInAddr = ^TaPInAddr;
      var
        PHE: PHostEnt;
        PPtr: PaPInAddr;
        Buffer: array [0..63] of char;
        I: Integer;
        GInitData: TWSADATA;
      begin
        WSAStartup($101, GInitData);
        GetHostName(Buffer, SizeOf(Buffer));
        PHE := GetHostByName(Buffer);
        if not Assigned(PHE) then Exit;
        PPtr := PaPInAddr(PHE^.h_addr_list);
        I := 0;
        while pptr^[I] <> nil do
        begin
          IPList.Add(StrPas(inet_ntoa(PPtr^[I]^)));
          Inc(I);
        end;
        WSACleanup;
      end;
      

  9.   

    to: jackie168 谢谢
      虽然这是个解决办法,但是好象不是很实用 比如我现在在本地写个小程序用这个办法,好象不太合适
      再等等,如果没有好的解决办法,就结帖,请关注. :)
      

  10.   

    如果在内网就是要用 jackie168(三箭齐发)  的方法了
      

  11.   

    谢谢 jackie168(三箭齐发)
    已经发帖答谢了,请接受
    http://community.csdn.net/Expert/topic/4235/4235222.xml?temp=.8342707
      

  12.   

    to: jackie168 谢谢
      虽然这是个解决办法,但是好象不是很实用 比如我现在在本地写个小程序用这个办法,好象不太合适
      再等等,如果没有好的解决办法,就结帖,请关注. :)说到结帖
    是怎么回事啊?
    我刚来csdn。发帖从来不结
      

  13.   

    请问一下,这段代码表示什么意思?
     type
        TaPInAddr = array [0..10] of PInAddr;
        PaPInAddr = ^TaPInAddr;