【发布时间】:2014-06-12 15:15:07
【问题描述】:
我想使用 c# 查找本地网络上的所有设备。
目前的解决方案是基于 ping 我本地网络上的每个 ip。这里解释的东西:
How to Perform Multiple "Pings" in Parallel using C#
问题是,如果我的 PC 上有多个网络接口(例如一个 wifi 和一个以太网),我如何知道我应该 ping 哪一个?如何为每个网络找到合适的地址范围?等等。如果子网掩码很大(例如子网为 255.255.0.0 时,这样做会花费很多时间。
还有一些其他建议的解决方案,例如:
Locating computer on subnet/network
但是我如何 ping 广播地址并找到谁在回答? C# 中的 Ping 只为一个 IP 返回一个结果(对吗)?
有没有更好的解决方案?
【问题讨论】:
-
合适的地址 = 获取接口的 IP,获取它的网络掩码,这将为您提供“本地”的 IP 范围。
-
@MarcB 如何获取接口IP及其掩码?如何枚举计算机中的接口?
-
出于好奇,也许是为了提出一个完全不同的解决方案,您介意告诉我们总体情况如何吗?为什么要 ping 所有可能的地址?
-
@RenniePet:我正在寻找本地网络上的所有设备并找到它们的 IP。通过这种方式,我可以扫描它们以查找它们是否是我想要的设备。例如,假设我正在尝试在网络中搜索我自己的所有设计设备。如果我知道他们,那么我可以向他们发送 ID 请求并确保他们在该 IP 上。我可以向每个IP发送请求,但是太耗时了。我更喜欢一种我知道地址然后从那里开始搜索的方式。
-
我不是这方面的专家,但我认为您应该研究一下 Windows 远程过程调用工具。我的理解是客户端程序(例如 Outlook)通过 RPC 找到他们想要与之交谈的主机(Exchange Server)。这利用了命名服务,因此 Exchange 告诉 RPC 系统“我是 Exchange Server,任何寻找 Exchange Server 的人都可以与我交谈”。 Outlook 程序对 RPC 说“周围是否有任何 Exchange 服务器,如果有,请将我连接到它们”。这样就避免了盲目ping的问题。
标签: c# networking ping