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

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

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

我知道我可以使用nmap在Linux中扫描networking,但是我怎样才能在Windows中执行此操作? 子网掩码是255.255.255.0。

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

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

由于以下原因,如果目标计算机驻留在不同的networking中,则无法直接获取目标计算机的MAC地址:

答:本地机器不会为远程机器ARP。

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

C.远程路由器将远程机器的ARP。 远程机器将响应ARP查询,并将rewspones发送到查询器,这是远程路由器,响应将停止。

如果您需要查找远程计算机的MAC地址,则需要访问远程路由器上的ARPcaching。

有Windows的nmap,你可以从namp网站下载。 只要寻找Windows版本,它甚至带有一个GUI。

对于C#,可以使用SendARP() 。

对于同一个子网:

arp将显示你的机器的arp表,其中将包括与之通信的客户机的MAC地址。 所以, ping ,然后arp ,以确保您从所需的客户端获得一个MAC地址。

(使用arp /?作为命令的帮助/用法显示)

对于不同的子网:

getmac /s [ip]

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

编辑:(来想一想,你也可以尝试nbtstat命令以及给予Windows。可能会或可能无法工作,具体取决于networking设置和configuration,但它肯定可以从不同的子网拉MAC地址。

假设你知道目标是一个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 

也可以使用DhcpEnumSubnetClients,DhcpEnumSubnetClientsV4或DhcpEnumSubnetClientsV5 从DHCP服务器获取信息 。 不知道你需要什么样的权限来运行,或者是否必须从DHCP服务器运行。 文档不是很清楚。