如何检索此计算机的IP地址?

问题描述 投票:9回答:7

什么是最简单的(模块包含,代码长度等)方式来检索机器IP地址(第一个接口打开)?我知道使用MSINET的一些解决方案,但我相信我们可以做得更好。不要回复

Function HomeIP() as Atring
HomeIP= "127.0.0.1"
End Function

因为它不那么有趣......或者说是正确的。这个场景是一个qazxsw poi的问题,我正在尝试建立一个回复。

excel vba excel-vba msinet
7个回答
19
投票

以下是document ID feature的改编示例:

Technet

它要求您在项目的引用中包含Microsoft WMI Scripting Library。


2
投票

我找到了几个例子: -

Function GetIPAddress() Const strComputer As String = "." ' Computer name. Dot means local computer Dim objWMIService, IPConfigSet, IPConfig, IPAddress, i Dim strIPAddress As String ' Connect to the WMI service Set objWMIService = GetObject("winmgmts:" _ & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2") ' Get all TCP/IP-enabled network adapters Set IPConfigSet = objWMIService.ExecQuery _ ("Select * from Win32_NetworkAdapterConfiguration Where IPEnabled=TRUE") ' Get all IP addresses associated with these adapters For Each IPConfig In IPConfigSet IPAddress = IPConfig.IPAddress If Not IsNull(IPAddress) Then strIPAddress = strIPAddress & Join(IPAddress, ", ") End If Next GetIPAddress = strIPAddress End Function

http://www.everythingaccess.com/tutorials.asp?ID=Get-all-IP-Addresses-of-your-machine

编辑

这是第一个链接的代码,略有修改

http://puremis.net/excel/code/079.shtml

1
投票

你可以执行shell命令Option Explicit ' VBA MODULE: Get all IP Addresses of your machine ' (c) 2005 Wayne Phillips (http://www.everythingaccess.com) ' Written 18/05/2005 ' ' REQUIREMENTS: Windows 98 or above, Access 97 and above ' ' Please read the full tutorial here: ' http://www.everythingaccess.com/tutorials.asp?ID=Get-all-IP-Addresses-of-your-machine ' ' Please leave the copyright notices in place. ' Thank you. ' 'Option Compare Database 'A couple of API functions we need in order to query the IP addresses in this machine Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long) Public Declare Function GetIpAddrTable Lib "Iphlpapi" (pIPAdrTable As Byte, pdwSize As Long, ByVal Sort As Long) As Long 'The structures returned by the API call GetIpAddrTable... Type IPINFO dwAddr As Long ' IP address dwIndex As Long ' interface index dwMask As Long ' subnet mask dwBCastAddr As Long ' broadcast address dwReasmSize As Long ' assembly size Reserved1 As Integer Reserved2 As Integer End Type Public Function ConvertIPAddressToString(longAddr As Long) As String Dim IPBytes(3) As Byte Dim lngCount As Long 'Converts a long IP Address to a string formatted 255.255.255.255 'Note: Could use inet_ntoa instead CopyMemory IPBytes(0), longAddr, 4 ' IP Address is stored in four bytes (255.255.255.255) 'Convert the 4 byte values to a formatted string While lngCount < 4 ConvertIPAddressToString = ConvertIPAddressToString + _ CStr(IPBytes(lngCount)) + _ IIf(lngCount < 3, ".", "") lngCount = lngCount + 1 Wend End Function Public Function GetFirstNonLocalIPAddress() Dim Ret As Long, Tel As Long Dim bytBuffer() As Byte Dim IPTableRow As IPINFO Dim lngCount As Long Dim lngBufferRequired As Long Dim lngStructSize As Long Dim lngNumIPAddresses As Long Dim strIPAddress As String On Error GoTo ErrorHandler: Call GetIpAddrTable(ByVal 0&, lngBufferRequired, 1) If lngBufferRequired > 0 Then ReDim bytBuffer(0 To lngBufferRequired - 1) As Byte If GetIpAddrTable(bytBuffer(0), lngBufferRequired, 1) = 0 Then 'We've successfully obtained the IP Address details... 'How big is each structure row?... lngStructSize = LenB(IPTableRow) 'First 4 bytes is a long indicating the number of entries in the table CopyMemory lngNumIPAddresses, bytBuffer(0), 4 While lngCount < lngNumIPAddresses 'bytBuffer contains the IPINFO structures (after initial 4 byte long) CopyMemory IPTableRow, _ bytBuffer(4 + (lngCount * lngStructSize)), _ lngStructSize strIPAddress = ConvertIPAddressToString(IPTableRow.dwAddr) If Not ((strIPAddress = "127.0.0.1")) Then GetFirstNonLocalIPAddress = strIPAddress Exit Function End If lngCount = lngCount + 1 Wend End If End If Exit Function ErrorHandler: MsgBox "An error has occured in GetIPAddresses():" & vbCrLf & vbCrLf & _ Err.Description & " (" & CStr(Err.Number) & ")" End Function 并解析返回的结果吗?


1
投票

还有另一种使用ipconfig的简单方法。 ipconfig


0
投票

Codeproject有一篇关于如何使用.net:http://www.vbaexpress.com/kb/getarticle.php?kb_id=537执行此操作的文章

您总是可以创建一个控制台可执行文件,并从VBA调用它。

RO


0
投票

无论如何,http://www.codeproject.com/KB/cs/network.aspx可能会在XP上完成这项工作。不确定其他Windows版本或其他语言的本地化。部分样本输出:

C:\ Documents and Settings \ colin> nbtstat -n

本地连接:节点IpAddress:[192.168.1.100]范围ID:[]

nbtstat -n

等等


0
投票
            NetBIOS Local Name Table
© www.soinside.com 2019 - 2024. All rights reserved.