取得本机IP地址列表(VB6.0代码)

在CSDN的 这个帖子 里见到了此需求.

有时需要取得本机的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


模块关键代码:

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


下载文件 点击下载此文件

评论: 1 | 引用: 0 | 查看次数: 957
fio
fio[2011-05-01 10:04 PM | ]
怎么判断对方的外网IP?
回复来自 admin 的评论 admin 于 2011-05-05 03:36 PM 回复
既然已经建立了连接,说明已经解决了连接问题.
如果是使用WINSOCK,则可以使用RemoteIP属性得到对方IP