我用这段只得到了
本机的ip地址我要得到我上网时的ip地址?procedure TForm1.Get_Local_IP;
type
    TaPInAddr = array [0..10] of PInAddr;
    PaPInAddr = ^TaPInAddr;
var
    phe  : PHostEnt;
    pptr : PaPInAddr;
    Buffer : array [0..63] of char;
    I    : Integer;
    GInitData      : TWSADATA;
    ip:String;
begin
    WSAStartup($101, GInitData);
    GetHostName(Buffer, SizeOf(Buffer));
    phe :=GetHostByName(buffer);
    if phe = nil then Exit;
    pptr := PaPInAddr(Phe^.h_addr_list);
    I := 0;
    while pptr^[I] <> nil do begin
      ip:=StrPas(inet_ntoa(pptr^[I]^));
      Inc(I);
    end;
    WSACleanup;
end;

解决方案 »

  1.   

    通过机器名取得ip地址
    function procedure TForm1.nametoip(name:string):string;varWSAData: TWSAData;HostEnt: PHostEnt;beginresult:='';WSAStartup(2, WSAData);HostEnt := gethostbyname(PChar(name));if HostEnt <> nil thenbeginwith HostEnt^ doresult:= Format('%d.%d.%d.%d', [Byte(h_addr^[0]), Byte(h_addr^[1]), Byte(h_addr^[2]), Byte(h_addr^[3])]);end;WSACleanup;end; 
      

  2.   

    这个我知道,我已经有了,不行的,我是在一个局域网中,我上网是通过一个网关的...你的程序只能得到本机ip地址,我要的是我上网时的ip地址
      

  3.   

    /////取得域(列出各个网络类型中的所有工作组名称等)
    function TForm1.GetServerList(var List: TStringList): Boolean;
    type
        TNetResourceArray = ^TNetResource;//网络类型的数组
    Var
      NetResource : TNetResource;
      Buf : Pointer;
      Count,BufSize,Res : DWORD;
      lphEnum : THandle;
      p : TNetResourceArray;
      i,j : SmallInt;
      NetworkTypeList : TList; 
    Begin
      Result := False;
      NetworkTypeList := TList.Create;
      List.Clear; 
    //获取整个网络中的文件资源的句柄,lphEnum为返回名柄
          Res := WNetOpenEnum( RESOURCE_GLOBALNET, RESOURCETYPE_DISK,
                               RESOURCEUSAGE_CONTAINER, Nil,lphEnum);
          If Res <> NO_ERROR Then exit;//Raise Exception(Res);//执行失败 
    //获取整个网络中的网络类型信息
          Count := $FFFFFFFF;//不限资源数目
          BufSize := 8192;//缓冲区大小设置为8K
          GetMem(Buf, BufSize);//申请内存,用于获取工作组信息
          Res := WNetEnumResource(lphEnum, Count, Pointer(Buf), BufSize);
          If ( Res = ERROR_NO_MORE_ITEMS )//资源列举完毕
          or (Res <> NO_ERROR )//执行失败
          Then Exit;
          P := TNetResourceArray(Buf);
          For I := 0 To Count - 1 Do//记录各个网络类型的信息
          Begin
              NetworkTypeList.Add(p);
              Inc(P);
          End;
          //WNetCloseEnum关闭一个列举句柄
          Res := WNetCloseEnum(lphEnum);//关闭一次列举
          If Res <> NO_ERROR Then exit;
          For J := 0 To NetworkTypeList.Count-1 Do //列出各个网络类型中的所有工作组名称
          Begin//列出一个网络类型中的所有工作组名称
              NetResource := TNetResource(NetworkTypeList.Items[J]^);//网络类型信息 
    //获取某个网络类型的文件资源的句柄,NetResource为网络类型信息,lphEnum为返回名柄
              Res := WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_DISK,
                                  RESOURCEUSAGE_CONTAINER, @NetResource,lphEnum);
              If Res <> NO_ERROR Then break;//执行失败
              While true Do//列举一个网络类型的所有工作组的信息
              Begin
                  Count := $FFFFFFFF;//不限资源数目
                  BufSize := 8192;//缓冲区大小设置为8K
                  GetMem(Buf, BufSize);//申请内存,用于获取工作组信息
                  //获取一个网络类型的文件资源信息,
                  Res := WNetEnumResource(lphEnum, Count, Pointer(Buf), BufSize);
                  If ( Res = ERROR_NO_MORE_ITEMS ) //资源列举完毕
                  or (Res <> NO_ERROR) //执行失败
                  then break;
                  P := TNetResourceArray(Buf);
                  For I := 0 To Count - 1 Do//列举各个工作组的信息
                  Begin
                      List.Add( StrPAS( P^.lpRemoteName ));//取得一个工作组的名称
                      Inc(P);
                  End;
              End;
              Res := WNetCloseEnum(lphEnum);//关闭一次列举
              If Res <> NO_ERROR Then break;//执行失败
          End;
          Result := True;
          FreeMem(Buf);
          NetworkTypeList.Destroy; 
    End;//////取得网上(局网)的所有用户:
    function TForm1.GetUsers(GroupName: string;
      var List: TStringList): Boolean;
    type
        TNetResourceArray = ^TNetResource;//网络类型的数组 
    Var
      NetResource : TNetResource;
      Buf : Pointer;
      Count,BufSize,Res : DWord;
      Ind : Integer;
      lphEnum : THandle;
      Temp : TNetResourceArray;
    Begin
         Result := False;
         List.Clear;
         FillChar(NetResource, SizeOf(NetResource), 0);//初始化网络层次信息
         NetResource.lpRemoteName := @GroupName[1];//指定工作组名称
         NetResource.dwDisplayType := RESOURCEDISPLAYTYPE_SERVER;//类型为服务器(工作组)
         NetResource.dwUsage := RESOURCEUSAGE_CONTAINER;
         NetResource.dwScope := RESOURCETYPE_DISK;//列举文件资源信息
         //获取指定工作组的网络资源句柄
         Res := WNetOpenEnum( RESOURCE_GLOBALNET, RESOURCETYPE_DISK,
                              RESOURCEUSAGE_CONTAINER, @NetResource,lphEnum);
         If Res <> NO_ERROR Then Exit; //执行失败
         While True Do//列举指定工作组的网络资源
         Begin
             Count := $FFFFFFFF;//不限资源数目
             BufSize := 8192;//缓冲区大小设置为8K
             GetMem(Buf, BufSize);//申请内存,用于获取工作组信息
             //获取计算机名称
             Res := WNetEnumResource(lphEnum, Count, Pointer(Buf), BufSize);
             If Res = ERROR_NO_MORE_ITEMS Then break;//资源列举完毕
             If (Res <> NO_ERROR) then Exit;//执行失败
             Temp := TNetResourceArray(Buf);
             For Ind := 0 to Count - 1 do//列举工作组的计算机名称
             Begin
                 //获取工作组的计算机名称,+2表示删除"\\",如\\wangfajun=>wangfajun
                 List.Add(Temp^.lpRemoteName + 2);
                 Inc(Temp);
             End;
         End;
         Res := WNetCloseEnum(lphEnum);//关闭一次列举
         If Res <> NO_ERROR Then exit;//执行失败
         Result := True;
         FreeMem(Buf);
    End;//////根据用户名解析ip:
    function TForm1.GetIPFromName(Name: string): string;
    var
      WSAData: TWSAData;
      HostEnt: PHostEnt;
    begin
      //try
      WSAStartup(2, WSAData);
      HostEnt := gethostbyname(PChar(Name));
      with HostEnt^ do
        Result := Format('%d.%d.%d.%d', [Byte(h_addr^[0]),
          Byte(h_addr^[1]), Byte(h_addr^[2]), Byte(h_addr^[3])]);
          WSACleanup;
         if result = '' then exit;
      // except
        //on e:error do showmessage(e.message)
    end;
      

  4.   

    thisisxutao(Probational 1.0) 你的不对,我要的不是这个,我要的是像能显示对方ip的oicq那样,能得到在线ip地址?
      

  5.   

    你可以www.5igo5.com注册会员(免费)
    他们免费在线为你解答