同上!再说的具体一点:我要在一台具有双网卡的机器上分别获取那块对内的网卡的IP地址和对外的那块网卡的IP地址。请不要用WINSOCK控件,我想知道有没有什么API或者其他函数可以实现这个功能。谢谢!UP有分!

解决方案 »

  1.   

    Private Declare Function GetIfTable Lib "iphlpapi" (ByRef pIfTable As Any, _
    ByRef pdwSize As Long, ByVal bOrder As Long) As Long这个函数里一定有,具体的我暂时找不到
      

  2.   

    Option ExplicitPrivate 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
    Dim strIP As String
    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 TypePrivate Sub main()
         Start
         MsgBox strIP
    End Sub
       
    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
      

  3.   

    To:JennyVenus 
    为什么上面的程序我运行后,告诉我,我有4个IP地址,我只有两个网卡啊!能告诉我为什么么?谢谢!