取得本机IP地址列表(VB6.0代码)
作者:admin 日期:2011-04-23
在CSDN的 这个帖子 里见到了此需求.
有时需要取得本机的IP地址列表,此时可以调用ipconfig.exe,但不方便;那就使用API:GetIpAddrTable来取得吧.
我写了一个封装,调用GetIPList()就能获得当前所有的IP地址列表,例子:
模块关键代码:
点击下载此文件
有时需要取得本机的IP地址列表,此时可以调用ipconfig.exe,但不方便;那就使用API:GetIpAddrTable来取得吧.
我写了一个封装,调用GetIPList()就能获得当前所有的IP地址列表,例子:
复制内容到剪贴板
程序代码

Dim I as long,IPs() as string
ips=GetIPList
for i=0 to ubound(ips)
debug.print ips(i)
next
ips=GetIPList
for i=0 to ubound(ips)
debug.print ips(i)
next
模块关键代码:
复制内容到剪贴板
程序代码

Public Function GetIPList() As String()
'取得本机所有IP地址
'
'返回值:
' 字符串数组,包含本机所有的IP地址
'
Dim I As Long, lRet As Long, Buff() As Byte, lSize As Long, lPtr As Long, sTmp As String
Dim IPADT As MIB_IPADDRTABLE, WD As WSADATA, OutBuff() As String
On Error GoTo Err
ReDim Buff(0) '只分配1字节
lRet = GetIpAddrTable(VarPtr(Buff(0)), lSize, True) '首次调用,缓冲区肯定不足
If lRet = ERROR_INSUFFICIENT_BUFFER Then
ReDim Buff(lSize - 1) '这里已经得到了所需要的缓冲区大小
lRet = GetIpAddrTable(VarPtr(Buff(0)), lSize, True) '再次调用
End If
If lRet = NO_ERROR Then
Call CopyMemory(VarPtr(IPADT.dEntrys), VarPtr(Buff(0)), UBound(Buff) + 1) '复制到结构中
If WSAStartup(&H101, WD) = 0 Then
ReDim OutBuff(IPADT.dEntrys - 1) '.dEntrys中是IP地址数量
For I = 0 To IPADT.dEntrys - 1
lPtr = inet_ntoa(IPADT.mIPInfo(I).dwAddr) '转换IP地址LONG值,得到指向X.X.X.X格式IP地址字符串的指针
sTmp = Space(lstrlen(lPtr)) '分配缓冲区
Call CopyMemory(StrPtr(sTmp), lPtr, Len(sTmp)) '复制字符串
OutBuff(I) = Trim(Replace(StrConv(sTmp, vbUnicode), Chr(0), Chr(32))) '去掉NULL并保存结果
Debug.Print "IP = " & OutBuff(I)
Next
End If
End If
GetIPList = OutBuff
Err:
Call WSACleanup
End Function
'取得本机所有IP地址
'
'返回值:
' 字符串数组,包含本机所有的IP地址
'
Dim I As Long, lRet As Long, Buff() As Byte, lSize As Long, lPtr As Long, sTmp As String
Dim IPADT As MIB_IPADDRTABLE, WD As WSADATA, OutBuff() As String
On Error GoTo Err
ReDim Buff(0) '只分配1字节
lRet = GetIpAddrTable(VarPtr(Buff(0)), lSize, True) '首次调用,缓冲区肯定不足
If lRet = ERROR_INSUFFICIENT_BUFFER Then
ReDim Buff(lSize - 1) '这里已经得到了所需要的缓冲区大小
lRet = GetIpAddrTable(VarPtr(Buff(0)), lSize, True) '再次调用
End If
If lRet = NO_ERROR Then
Call CopyMemory(VarPtr(IPADT.dEntrys), VarPtr(Buff(0)), UBound(Buff) + 1) '复制到结构中
If WSAStartup(&H101, WD) = 0 Then
ReDim OutBuff(IPADT.dEntrys - 1) '.dEntrys中是IP地址数量
For I = 0 To IPADT.dEntrys - 1
lPtr = inet_ntoa(IPADT.mIPInfo(I).dwAddr) '转换IP地址LONG值,得到指向X.X.X.X格式IP地址字符串的指针
sTmp = Space(lstrlen(lPtr)) '分配缓冲区
Call CopyMemory(StrPtr(sTmp), lPtr, Len(sTmp)) '复制字符串
OutBuff(I) = Trim(Replace(StrConv(sTmp, vbUnicode), Chr(0), Chr(32))) '去掉NULL并保存结果
Debug.Print "IP = " & OutBuff(I)
Next
End If
End If
GetIPList = OutBuff
Err:
Call WSACleanup
End Function

评论: 1 | 引用: 0 | 查看次数: 957
如果是使用WINSOCK,则可以使用RemoteIP属性得到对方IP