我想获取本机的IP地址,本机装有两个网卡,一个有线一个无线,所以要求获取的两个IP地址能区分开,从CSDN上找到以前的一个程序如下: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 Const MAX_IP = 255Private Type IPINFO
            dwAddr   As Long                        'IPµØÖ·
            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
  
Dim strIP     As String
    
              
  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
              
  Public Sub Start()
            Dim Ret     As Long, Tel       As Long
            Dim bBytes()     As Byte
            Dim Listing     As MIB_IPADDRTABLE
            
            On Error GoTo END1
            
            GetIpAddrTable ByVal 0&, Ret, True
            
            If Ret <= 0 Then Exit Sub
            
            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 & 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
            Exit Sub
END1:
            MsgBox "ERROR"
  End Sub
    
  Private Sub Form_Load()
            Start
            MsgBox strIP
    
  End Sub
程序是正确的能用,但我有个疑问:(请大家帮忙运行下然后看下结果)它获取的IP地址有什么顺序吗?(本来想把结果截个图,但不会在这添加图片,先用语言描述吧)
我现在运行出的结果显示:
有3个IP地址:第一个IP地址192.168.1.105,是我的无线网卡的;第二个是172.29.27.185是有线的;第三个是127.0.0.1我的任务是显示我的电脑上无线IP和有线IP分别是什么?那用这个程序,第一个读成无线,第二个读成有线可以吗?同学说顺序不一定的,不知道放到别的机器上读出来顺序是什么样的,所以用这个方法有不保险。所以请懂这个的帮我看下,这个程序读的IP有什么顺序吗??另外,程序中用红色标的语句不太懂什么意思,就是这个API函数GetIpAddrTable该怎么用搞不太明白,请大家帮忙解答下。非常感谢,期待回复!

解决方案 »

  1.   

    不好意思,不知道为什么有乱码,红色也没标成功,再发一遍程序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 Const MAX_IP = 255Private Type IPINFO
                dwAddr   As Long                        'ip地址·
                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
      
    Dim strIP     As String
        
                  
      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
                  
      Public Sub Start()
                Dim Ret     As Long, Tel       As Long
                Dim bBytes()     As Byte
                Dim Listing     As MIB_IPADDRTABLE
                
                On Error GoTo END1
                
                GetIpAddrTable ByVal 0&, Ret, True
                
                If Ret <= 0 Then Exit Sub
                
                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 & 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
                Exit Sub
    END1:
                MsgBox "ERROR"
      End Sub
        
      Private Sub Form_Load()
                Start
                MsgBox strIP
        
      End Sub
      

  2.   

    IP地址分类方法: http://diybbs.zol.com.cn/3/286_26809.html
    127.0.0.1 就是本机(网卡正常就有这个 IP),其它两个如果是 DNS 自动分配的话,每个 DNS 的段通常是固定,你可以根据 IP 的前缀来区分。