用ADSL上网,请问VB如何得到ADSL上的动态IP???多谢!

解决方案 »

  1.   

    http://community.csdn.net/Expert/FAQ/FAQ_Index.asp?id=161784
      

  2.   

    Private Const MAX_IP = 255
    Private Type IPINFO
            dwAddr As Long
            dwIndex As Long
            dwMask As Long
            dwBCastAddr As Long
            dwReasmSize As Long
            unused1 As Integer
            unused2 As Integer
    End Type
    Private Type MIB_IPADDRTABLE
            dEntrys As Long
            mIPInfo(MAX_IP) As IPINFO
    End Type
    Private Type IP_Array
            mBuffer As MIB_IPADDRTABLE
            BufferLen As Long
    End Type
    Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
    Private Declare Function GetIpAddrTable Lib "IPHlpApi" (pIPAdrTable As Byte, pdwSize As Long, ByVal Sort As Long) As Long
         
    Private Function ConvertAddressToString(longAddr As Long) As String
      Dim myByte(3) As Byte
      Dim Cnt As Long
      CopyMemory myByte(0), longAddr, 4
      For Cnt = 0 To 3
      ConvertAddressToString = ConvertAddressToString + CStr(myByte(Cnt)) + "."
      Next Cnt
      ConvertAddressToString = Left$(ConvertAddressToString, Len(ConvertAddressToString) - 1)
    End Function
         
    Private Function GetIPAddress() As String
    Dim Ret As Long, Tel As Long
    Dim bBytes() As Byte
    Dim StrIP As String
    Dim Listing As MIB_IPADDRTABLE
    On Error GoTo ERROR
      GetIpAddrTable ByVal 0&, Ret, True
      If Ret <= 0 Then Exit Function
      ReDim bBytes(0 To Ret - 1) As Byte
      GetIpAddrTable bBytes(0), Ret, False
      CopyMemory Listing.dEntrys, bBytes(0), 4
      StrIP = "你电脑上有 " & Listing.dEntrys & " 个 IP 地址。" & vbCrLf
      StrIP = StrIP & "----------------------------------------------" & vbCrLf
      For Tel = 0 To Listing.dEntrys - 1
      CopyMemory Listing.mIPInfo(Tel), bBytes(4 + (Tel * Len(Listing.mIPInfo(0)))), Len(Listing.mIPInfo(Tel))
      StrIP = StrIP & "IP 地址:" & ConvertAddressToString(Listing.mIPInfo(Tel).dwAddr) & vbCrLf
      StrIP = StrIP & "子网掩码:" & ConvertAddressToString(Listing.mIPInfo(Tel).dwMask) & vbCrLf
      StrIP = StrIP & "广播地址:" & ConvertAddressToString(Listing.mIPInfo(Tel).dwBCastAddr) & vbCrLf
      StrIP = StrIP & "----------------------------------------------" & vbCrLf
      Next Tel
      GetIPAddress = StrIP
    ERROR: If Err.Number <> 0 Then GetIPAddress = "无法正确取得IP地址,请检查您的配置。"
    End FunctionPrivate Sub CmdGet_Click()
    TxtShow.Text = GetIPAddress
    End Sub
    陈锐写的。
      

  3.   

    以下代码写在模块中,可以直接调用 GetIPAddress()方法 
    Public Const MAX_WSADescription = 256 
    Public Const MAX_WSASYSStatus = 128 
    Public Const ERROR_SUCCESS As Long = 0 
    Public Const WS_VERSION_REQD As Long = &H101 
    Public Const WS_VERSION_MAJOR As Long = WS_VERSION_REQD \ &H100 And &HFF& 
    Public Const WS_VERSION_MINOR As Long = WS_VERSION_REQD And &HFF& 
    Public Const MIN_SOCKETS_REQD As Long = 1 
    Public Const SOCKET_ERROR As Long = -1 
    Public Type HOSTENT 
    hName As Long 
    hAliases As Long 
    hAddrType As Integer 
    hLen As Integer 
    hAddrList As Long 
    End Type 
    Public Type WSADATA 
    wVersion As Integer 
    wHighVersion As Integer 
    szDescription(0 To MAX_WSADescription) As Byte 
    szSystemStatus(0 To MAX_WSASYSStatus) As Byte 
    wMaxSockets As Integer 
    wMaxUDPDG As Integer 
    dwVendorInfo As Long 
    End Type Public Declare Function WSAGetLastError Lib "WSOCK32.DLL" () As Long 
    Public Declare Function WSAStartup Lib "WSOCK32.DLL" (ByVal wVersionRequired As Long, lpWSADATA As WSADATA) As Long 
    Public Declare Function WSACleanup Lib "WSOCK32.DLL" () As Long 
    Public Declare Function gethostname Lib "WSOCK32.DLL" (ByVal szHost As String, ByVal dwHostLen As Long) As Long 
    Public Declare Function gethostbyname Lib "WSOCK32.DLL" (ByVal szHost As String) As Long 
    Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (hpvDest As Any, ByVal hpvSource As Long, ByVal cbCopy As Long) Public Function GetIPAddress() As String 
    Dim sHostName As String * 256 
    Dim lpHost As Long 
    Dim HOST As HOSTENT 
    Dim dwIPAddr As Long 
    Dim tmpIPAddr() As Byte 
    Dim i As Integer 
    Dim sIPAddr As String 
    If Not SocketsInitialize() Then 
    GetIPAddress = "" 
    Exit Function 
    End If 
    'gethostname returns the name of the local host into 
    'the buffer specified by the name parameter. The host 
    'name is returned as a null-terminated string. The 
    'form of the host name is dependent on the Windows 
    'Sockets provider - it can be a simple host name, or 
    'it can be a fully qualified domain name. However, it 
    'is guaranteed that the name returned will be successfully 
    'parsed by gethostbyname and WSAAsyncGetHostByName. 
    'In actual application, if no local host name has been 
    'configured, gethostname must succeed and return a token 
    'host name that gethostbyname or WSAAsyncGetHostByName 
    'can resolve. 
    If gethostname(sHostName, 256) = SOCKET_ERROR Then 
    GetIPAddress = "" 
    MsgBox "Windows Sockets error " & Str$(WSAGetLastError()) & " has occurred. Unable to successfully get Host Name." 
    SocketsCleanup 
    Exit Function 
    End If 
    'gethostbyname returns a pointer to a HOSTENT structure 
    '- a structure allocated by Windows Sockets. The HOSTENT 
    'structure contains the results of a successful search 
    'for the host specified in the name parameter. 
    'The application must never attempt to modify this 
    'structure or to free any of its components. Furthermore, 
    'only one copy of this structure is allocated per thread, 
    'so the application should copy any information it needs 
    'before issuing any other Windows Sockets function calls. 
    'gethostbyname function cannot resolve IP address strings 
    'passed to it. Such a request is treated exactly as if an 
    'unknown host name were passed. Use inet_addr to convert 
    'an IP address string the string to an actual IP address, 
    'then use another function, gethostbyaddr, to obtain the 
    'contents of the HOSTENT structure. 
    sHostName = Trim$(sHostName) lpHost = gethostbyname(sHostName) 
    If lpHost = 0 Then GetIPAddress = "" MsgBox "Windows Sockets are not responding. " & "Unable to successfully get Host Name." SocketsCleanup Exit Function End If 
    'to extract the returned IP address, we have to copy 'the HOST structure and its members CopyMemory HOST, lpHost, Len(HOST) CopyMemory dwIPAddr, HOST.hAddrList, 4 
    'create an array to hold the result ReDim tmpIPAddr(1 To HOST.hLen) CopyMemory tmpIPAddr(1), dwIPAddr, HOST.hLen 
    'and with the array, build the actual address, 'appending a period between members For i = 1 To HOST.hLen sIPAddr = sIPAddr & tmpIPAddr(i) & "." Next 
    'the routine adds a period to the end of the 'string, so remove it here GetIPAddress = Mid$(sIPAddr, 1, Len(sIPAddr) - 1) 
    SocketsCleanup 
    End Function Public Function GetIPHostName() As String 
    Dim sHostName As String * 256 
    If Not SocketsInitialize() Then GetIPHostName = "" Exit Function End If 
    If gethostname(sHostName, 256) = SOCKET_ERROR Then GetIPHostName = "" MsgBox "Windows Sockets error " & Str$(WSAGetLastError()) & " has occurred. Unable to successfully get Host Name." SocketsCleanup Exit Function End If 
    GetIPHostName = Left$(sHostName, InStr(sHostName, Chr(0)) - 1) SocketsCleanup 
    End Function Public Function HiByte(ByVal wParam As Integer) As Byte 
    'note: VB4-32 users should declare this function As Integer HiByte = (wParam And &HFF00&) \ (&H100) 
    End Function Public Function LoByte(ByVal wParam As Integer) As Byte 
    'note: VB4-32 users should declare this function As Integer LoByte = wParam And &HFF& 
    End Function Public Sub SocketsCleanup() 
    If WSACleanup() <> ERROR_SUCCESS Then MsgBox "Socket error occurred in Cleanup." End If 
    End Sub 
    Public Function SocketsInitialize() As Boolean 
    Dim WSAD As WSADATA Dim sLoByte As String Dim sHiByte As String 
    If WSAStartup(WS_VERSION_REQD, WSAD) <> ERROR_SUCCESS Then MsgBox "The 32-bit Windows Socket is not responding." SocketsInitialize = False Exit Function End If If WSAD.wMaxSockets < MIN_SOCKETS_REQD Then MsgBox "This application requires a minimum of " & CStr(MIN_SOCKETS_REQD) & " supported sockets." 
    SocketsInitialize = False Exit Function End If If LoByte(WSAD.wVersion) < WS_VERSION_MAJOR Or (LoByte(WSAD.wVersion) = WS_VERSION_MAJOR And HiByte(WSAD.wVersion) < WS_VERSION_MINOR) Then 
    sHiByte = CStr(HiByte(WSAD.wVersion)) sLoByte = CStr(LoByte(WSAD.wVersion)) 
    MsgBox "Sockets version " & sLoByte & "." & sHiByte & " is not supported by 32-bit Windows Sockets." 
    SocketsInitialize = False Exit Function 
    End If 'must be OK, so lets do it SocketsInitialize = True 
    End Function '--end block--'
      

  4.   

    用这个控件就OKhttp://www.refound.net/download/soft.asp?id=24
      

  5.   

    我想各位可能是搞错了,我想要的不是本机的LAN上的IP地址,而是WAN也就是路由服务器上的IP地址,请各路高手相助,多谢!
      

  6.   

    路由服务器上的IP地址??
    "路由服务器"就是另一台电脑(“路由服务器”不是电脑也相当于另一台电脑),得到另一台电脑的IP,你说应该用什么方法?
    1。有直接访问“路由服务器”的权限
    2。由于“路由服务器”允许通过它访问internet,所以有了第二个可能,就是让internet上的第三个电脑告诉你。
      

  7.   

    你可以通过LAN访问路由器,然后通过 SNMP协议获得路由器状态等信息,或者在路由器的WEB界面获得 IP地址。
      

  8.   

    我是使用sql server 执行命令行命令ipconfig得到动态ip的。