Windows 中如何获取不同网络段的 IP 和 MAC

Windows 中如何获取不同网络段的 IP 和 MAC

我的网段是192.168.0.*,目标网段是192.168.1.*,可以ping通。

我想在我的程序(C# 或 VC)中获取目标(例如 192.168.1.132)的 MAC 地址。

我知道我可以使用 nmap 在 Linux 中扫描网络,但是如何在 Windows 中执行此操作?子网掩码是 255.255.255.0。

编辑: 也许 nmap 也无法获取不同子网的 mac 地址。

答案1

告诉我们网络地址而不告诉我们子网掩码,就像告诉我们您的门牌号是 12345 但不告诉我们街道名称一样。我假设子网掩码是 255.255.255.0。

如果目标计算机位于不同的网络中,则无法直接获取其 MAC 地址,原因如下:

A. 本地机器不会为远程机器进行 ARP。

B. 本地路由器不会为远程机器进行 ARP。

C. 远程路由器将为远程机器发送 ARP。远程机器将响应 ARP 查询,并将响应发送给查询器(即远程路由器),响应将在此处停止。

如果您需要查找远程机器的 MAC 地址,则需要访问远程路由器上的 ARP 缓存。

答案2

有适用于 Windows 的 nmap,您可以从 namp 网站下载。只需查找 Windows 版本,它甚至带有 GUI。

对于 C#,你可以使用发送ARP()

答案3

对于同一子网:

arp将显示您的计算机的 arp 表,其中将包括与其通信的客户端的 MAC 地址。因此,ping然后arp确保您从所需的客户端获取 MAC 地址。

(用于arp /?命令上的帮助/用法显示)

对于不同的子网:

getmac /s [ip]

(使用 RPC,因此最好是 Windows 并且需要目标计算机上的权限,因此实际上仅在企业环境中有用。)

编辑 :(仔细想想,nbtstat在 Windows 中您也可以尝试该命令。根据网络设置和配置,它可能有效也可能无效,但它肯定可以从不同的子网中提取 MAC 地址。)

答案4

假设您知道目标是 Windows 系统,我会使用 WMI(Windows CIM 实现)来实现此目的。 这里是针对 VB.Net 回答的同一个问题,它很容易转换为 VC 或 C#。正如链接所说,一定要导入System.ManagementSystem.Management.Instrumentation命名空间。

Dim theManagementScope as new ManagementScope("\\" & ComputerName & "\root\cimv2")
Dim theQueryString as new string = "SELECT * FROM Win32_NetworkAdapterConfiguration WHERE IPEnabled = 1"

Dim theObjectQuery as new ObjectQuery(theQueryString)

Dim theSearcher as new ManagementObjectSearcher(theManagementScope, theObjectQuery)
Dim theResultsCollection as ManagementObjectCollection = theSearcher.Get()

for each currentResult as ManagementObject in theResultsCollection
   MessageBox.Show(currentResult("MacAddress").ToString())
next 

也有可能获得来自 DHCP 服务器的信息使用 DhcpEnumSubnetClients、DhcpEnumSubnetClientsV4 或 DhcpEnumSubnetClientsV5。但不确定运行该程序需要何种权限,或者是否必须从 DHCP 服务器运行。 文档不是很清楚。

相关内容