我想获取本机的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该怎么用搞不太明白,请大家帮忙解答下。非常感谢,期待回复!
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该怎么用搞不太明白,请大家帮忙解答下。非常感谢,期待回复!
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
127.0.0.1 就是本机(网卡正常就有这个 IP),其它两个如果是 DNS 自动分配的话,每个 DNS 的段通常是固定,你可以根据 IP 的前缀来区分。