应该是电信局动态分配给宽带用户的那种动态IP。
请写出API函数的名字和参数注释,
最好列出例子和源代码!

解决方案 »

  1.   

    动态分配之后就是本机的ip了,有例子得到本机的ip。
      

  2.   

    VB程序里面怎么获得本机的机器名_IP地址_物理地址
    Private Const MAX_COMPUTERNAME_LENGTH As Long = 31
    Private Declare Function GetComputerName Lib "kernel32" Alias "GetComputerNameA" (ByVal lpBuffer As String, nSize As Long) As Long
    Private Sub Form_Load()
        Dim dwLen As Long
        Dim strString As String
        'Create a buffer
        dwLen = MAX_COMPUTERNAME_LENGTH + 1
        strString = String(dwLen, "X")
        'Get the computer name
        GetComputerName strString, dwLen
        'get only the actual data
        strString = Left(strString, dwLen)
        'Show the computer name
        MsgBox strString
    End Sub
    Option Explicit'**************为取网卡地址的API声明**************Private Const NCBASTAT = &H33
    Private Const NCBNAMSZ = 16
    Private Const HEAP_ZERO_MEMORY = &H8
    Private Const HEAP_GENERATE_EXCEPTIONS = &H4
    Private Const NCBRESET = &H32Private Type NCB
      ncb_command As Byte
      ncb_retcode As Byte
      ncb_lsn As Byte
      ncb_num As Byte
      ncb_buffer As Long
      ncb_length As Integer
      ncb_callname As String * NCBNAMSZ
      ncb_name As String * NCBNAMSZ
      ncb_rto As Byte
      ncb_sto As Byte
      ncb_post As Long
      ncb_lana_num As Byte
      ncb_cmd_cplt As Byte
      ncb_reserve(9) As Byte ' Reserved, must be 0
      ncb_event As Long
    End TypePrivate Type ADAPTER_STATUS
      adapter_address(5) As Byte
      rev_major As Byte
      reserved0 As Byte
      adapter_type As Byte
      rev_minor As Byte
      duration As Integer
      frmr_recv As Integer
      frmr_xmit As Integer
      iframe_recv_err As Integer
      xmit_aborts As Integer
      xmit_success As Long
      recv_success As Long
      iframe_xmit_err As Integer
      recv_buff_unavail As Integer
      t1_timeouts As Integer
      ti_timeouts As Integer
      Reserved1 As Long
      free_ncbs As Integer
      max_cfg_ncbs As Integer
      max_ncbs As Integer
      xmit_buf_unavail As Integer
      max_dgram_size As Integer
      pending_sess As Integer
      max_cfg_sess As Integer
      max_sess As Integer
      max_sess_pkt_size As Integer
      name_count As Integer
    End TypePrivate Type NAME_BUFFER
      name As String * NCBNAMSZ
      name_num As Integer
      name_flags As Integer
    End TypePrivate Type ASTAT
      adapt As ADAPTER_STATUS
      NameBuff(30) As NAME_BUFFER
    End TypePrivate Declare Function Netbios Lib "netapi32.dll" (pncb As NCB) As Byte
    Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (hpvDest As Any, ByVal hpvSource As Long, ByVal cbCopy As Long)
    Private Declare Function GetProcessHeap Lib "kernel32" () As Long
    Private Declare Function HeapAlloc Lib "kernel32" (ByVal hHeap As Long, ByVal dwFlags As Long, ByVal dwBytes As Long) As Long
    Private Declare Function HeapFree Lib "kernel32" (ByVal hHeap As Long, ByVal dwFlags As Long, lpMem As Any) As Long'**********************************
    '* 得到网卡地址
    '* EthernetAddress(0)
    '* 返回值:字符串
    '**********************************
    Public Function EthernetAddress(LanaNumber As Long) As String
      Dim udtNCB       As NCB
      Dim bytResponse  As Byte
      Dim udtASTAT     As ASTAT
      Dim udtTempASTAT As ASTAT
      Dim lngASTAT     As Long
      Dim strOut       As String
      Dim x            As Integer
      udtNCB.ncb_command = NCBRESET
      bytResponse = Netbios(udtNCB)
      udtNCB.ncb_command = NCBASTAT
      udtNCB.ncb_lana_num = LanaNumber
      udtNCB.ncb_callname = "* "
      udtNCB.ncb_length = Len(udtASTAT)
      lngASTAT = HeapAlloc(GetProcessHeap(), HEAP_GENERATE_EXCEPTIONS Or HEAP_ZERO_MEMORY, udtNCB.ncb_length)
      strOut = ""
      If lngASTAT Then
        udtNCB.ncb_buffer = lngASTAT
        bytResponse = Netbios(udtNCB)
        CopyMemory udtASTAT, udtNCB.ncb_buffer, Len(udtASTAT)
         With udtASTAT.adapt
          For x = 0 To 5
            strOut = strOut & Right$("00" & Hex$(.adapter_address(x)), 2)
          Next x
        End With
        HeapFree GetProcessHeap(), 0, lngASTAT
      End If
      EthernetAddress = strOut
    End Function
    '得到IP地址
    '屏幕调用 LocalIPAddress()Option ExplicitPublic Const MAX_ADAPTER_NAME_LENGTH         As Long = 256
    Public Const MAX_ADAPTER_DESCRIPTION_LENGTH  As Long = 128
    Public Const MAX_ADAPTER_ADDRESS_LENGTH      As Long = 8
    Public Const ERROR_SUCCESS  As Long = 0Public Type IP_ADDRESS_STRING
        IpAddr(0 To 15)  As Byte
    End TypePublic Type IP_MASK_STRING
        IpMask(0 To 15)  As Byte
    End TypePublic Type IP_ADDR_STRING
        dwNext     As Long
        IpAddress  As IP_ADDRESS_STRING
        IpMask     As IP_MASK_STRING
        dwContext  As Long
    End TypePublic Type IP_ADAPTER_INFO
      dwNext                As Long
      ComboIndex            As Long  '保留
      sAdapterName(0 To (MAX_ADAPTER_NAME_LENGTH + 3))        As Byte
      sDescription(0 To (MAX_ADAPTER_DESCRIPTION_LENGTH + 3)) As Byte
      dwAddressLength       As Long
      sIPAddress(0 To (MAX_ADAPTER_ADDRESS_LENGTH - 1))       As Byte
      dwIndex               As Long
      uType                 As Long
      uDhcpEnabled          As Long
      CurrentIpAddress      As Long
      IpAddressList         As IP_ADDR_STRING
      GatewayList           As IP_ADDR_STRING
      DhcpServer            As IP_ADDR_STRING
      bHaveWins             As Long
      PrimaryWinsServer     As IP_ADDR_STRING
      SecondaryWinsServer   As IP_ADDR_STRING
      LeaseObtained         As Long
      LeaseExpires          As Long
    End TypePublic Declare Function GetAdaptersInfo Lib "iphlpapi.dll" _
      (pTcpTable As Any, _
       pdwSize As Long) As Long
       
    Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" _
      (dst As Any, _
       src As Any, _
       ByVal bcount As Long)
     Function LocalIPAddress() As String
       Dim cbRequired  As Long
       Dim buff()      As Byte
       Dim Adapter     As IP_ADAPTER_INFO
       Dim AdapterStr  As IP_ADDR_STRING
       Dim ptr1        As Long
       Dim sIPAddr     As String
       Dim found       As Boolean
       Call GetAdaptersInfo(ByVal 0&, cbRequired)
       If cbRequired > 0 Then
          ReDim buff(0 To cbRequired - 1) As Byte
          If GetAdaptersInfo(buff(0), cbRequired) = ERROR_SUCCESS Then
            '获取存放在buff()中的数据的指针
             ptr1 = VarPtr(buff(0))
             Do While (ptr1 <> 0)
               '将第一个网卡的数据转换到IP_ADAPTER_INFO结构中
                CopyMemory Adapter, ByVal ptr1, LenB(Adapter)
                With Adapter
                  'IpAddress.IpAddr成员给出了DHCP的IP地址
                   sIPAddr = TrimNull(StrConv(.IpAddressList.IpAddress.IpAddr, vbUnicode))
                   If Len(sIPAddr) > 0 Then
                      found = True
                      Exit Do
                   End If
                   ptr1 = .dwNext
                End With  'With Adapter
            '不再有网卡时,ptr1的值为0
             Loop  'Do While (ptr1 <> 0)
          End If  'If GetAdaptersInfo
       End If  'If cbRequired > 0
      '返回结果字符串
       LocalIPAddress = sIPAddr
    End Function Function TrimNull(item As String)
        Dim pos As Integer
        pos = InStr(item, Chr$(0))
        If pos Then
              TrimNull = Left$(item, pos - 1)
        Else: TrimNull = item
        End If
    End Function
      

  3.   

    偶再试过几次,发现,他取得的并不是上网用的动态IP嘛,因为偶重启后再运行,还是那个IP啊????
      

  4.   

    可以用winsock控件来完成winsock1.connect "www.csdn.net",80if 连接上了 winsock1.close
    现在的 localip就是上网用得ip了
      

  5.   

    若未通过代理服务器上网可采用 dyugao(晕头转向) 的方法
      

  6.   

    JennyVenus:
    不行,这个方法偶已经用过了!
      

  7.   

    dyugao(晕头转向) 的方法  UP~