VB6获取本机所有IP地址公用函数
2013-03-25 14:28
369 查看
因为正好有用到,整了个公用函数,一次获取本机全部IP地址:
使用很简单:
Option Explicit Private Declare Function WSAstartup Lib "WSOCK32.DLL" Alias "WSAStartup" (ByVal wVersionRequired As Integer, ByRef lpWSAData As WSAdata) As Long Private Declare Function WsACleanup Lib "WSOCK32.DLL" Alias "WSACleanup" () As Long Private Declare Function WSAIoctl Lib "ws2_32.dll" (ByVal s As Long, ByVal dwIoControlCode As Long, lpvInBuffer As Any, ByVal cbInBuffer As Long, lpvOutBuffer As Any, ByVal cbOutBuffer As Long, lpcbBytesReturned As Long, lpOverlapped As Long, lpCompletionRoutine As Long) As Long Private Declare Function socket Lib "WSOCK32.DLL" (ByVal af As Long, ByVal s_type As Long, ByVal protocol As Long) As Long Private Declare Function closesocket Lib "WSOCK32.DLL" (ByVal s As Long) As Long Private Declare Sub CopyMemory Lib "kernel32.dll" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long) Private Type sockaddr sin_family As Integer sin_port As Integer sin_addr As Long sin_zero As String * 8 End Type Private Type sockaddr_gen AddressIn As sockaddr filler(0 To 7) As Byte End Type Private Type INTERFACE_INFO iiFlags As Long iiAddress As sockaddr_gen iiBroadcastAddress As sockaddr_gen iiNetmask As sockaddr_gen End Type Private Type INTERFACEINFO iInfo(0 To 7) As INTERFACE_INFO End Type Private Type WSAdata wVersion As Integer wHighVersion As Integer szDescription As String * 255 szSystemStatus As String * 128 iMaxSockets As Integer iMaxUdpDg As Integer lpVendorInfo As Long End Type Private Const AF_INET = 2 Private Const SOCK_STREAM = 1 Private Const INVALID_SOCKET = -1 Private Const SIO_GET_INTERFACE_LIST As Long = &H4004747F Private Function GetStrIPFromLong(nIP As Long) As String On Error Resume Next Dim btBuffer(3) As Byte Call CopyMemory(ByVal VarPtr(btBuffer(0)), ByVal VarPtr(nIP), 4) Let GetStrIPFromLong = btBuffer(0) & "." & btBuffer(1) & "." & btBuffer(2) & "." & btBuffer(3) End Function Public Function EnumLocalIpAddress() As String() On Error GoTo Z Dim lngSocketHandle As Long Dim lngBytesReturned As Long Dim tpBuffer As INTERFACEINFO Dim nNumInterfaces As Integer Dim i As Integer Dim StartupInfo As WSAdata Dim strIPBuffer() As String If WSAstartup(&H202, StartupInfo) <> 0 Then Exit Function End If lngSocketHandle = socket(AF_INET, SOCK_STREAM, 0) If lngSocketHandle = INVALID_SOCKET Then Exit Function End If If WSAIoctl(lngSocketHandle, SIO_GET_INTERFACE_LIST, ByVal 0, ByVal 0, tpBuffer, 1024, lngBytesReturned, ByVal 0, ByVal 0) Then closesocket lngSocketHandle Exit Function End If nNumInterfaces = CInt(lngBytesReturned / 76) ReDim strIPBuffer(nNumInterfaces - 1) For i = 0 To nNumInterfaces - 1 strIPBuffer(i) = GetStrIPFromLong(tpBuffer.iInfo(i).iiAddress.AddressIn.sin_addr) Next i EnumLocalIpAddress = strIPBuffer closesocket lngSocketHandle WsACleanup Exit Function Z: End Function
使用很简单:
Dim i As Long, strIPAdd() As String strIPAdd = EnumLocalIpAddress If SafeArrayGetDim(strIPAdd) > 0 Then For i = 0 To UBound(strIPAdd) Debug.Print strIPAdd(i) Next End If
相关文章推荐
- VB6获取本机所有IP地址公用函数
- 获取本机所有接口和所有IP地址的函数
- 代码 Window获取本地所有IP地址
- PHP的两个常用函数截取中文字符串无乱码与获取客户端IP地址
- 属性函数php 获取对象所有属性(仅公有属性)
- windows C++ 通过UDP广播获取网络中所有设备ip地址
- ThinkPHP RBAC如何自动获取所有模块的函数 推荐
- gethostbyname()函数说明 ---用域名或主机名获取IP地址
- 学习笔记 “写一个函数获取某一张指定的网卡的IP地址”
- 在Thinkphp3.2.3框架下实现自动获取客户端IP地址的get_client_ip()函数
- vc根据域名获取IP地址 gethostbyname()函数
- Linux C语言 获取本机(所有网卡)IP地址(IPV4)
- JS中获取函数调用链所有参数的方法
- windows C++ 通过UDP广播获取网络中所有设备ip地址
- asp.net获取访问者ip地址的函数
- 写一个函数获取某一张指定的网卡的IP地址
- 获取目录下所有文件名函数
- 获取一个ip地址所经过的所有网关
- Linux 接口地址的获取-暨获取本地IP地址(所有地址,包括IPv4,IPV6,MAC 地址)
- Linux C语言 获取本机(所有网卡)IP地址(IPV4)