【问题标题】:How to know which devices are connected to my network (using C#)?如何知道哪些设备连接到我的网络(使用 C#)?
【发布时间】:2013-07-11 12:58:06
【问题描述】:

当用户连接到我的无线网络时,我正在尝试在 MySQL 数据库中插入一些数据(如 MAC 地址)。为了做到这一点,我一直在用我的 iPhone 和“arp -a” cmd 进行测试,我注意到结果表在我 ping 我的 iPhone 的 IP 地址之前不会刷新。例如,我将我的 iPhone 连接到我的无线网络,有时我几乎可以立即在“arp -a”的结果中看到 iPhone IP,但是当我从网络断开连接时,iPhone IP 仍然显示在结果中。我能做些什么来避免这种情况?如果我想为许多移动设备执行此操作,我是否必须 ping 大量 IP 号码?

我们将不胜感激。

【问题讨论】:

  • 我认为 ARP 表包含对断开一段时间的设备的 MAC/IP 对的引用,因此如果设备在短时间内重新连接,它会返回相同的 IP。我想你在那里回答了你自己的问题。
  • @Renan,感谢您的回答,ARP 有时需要很长时间才能更新。例如,当我将 iPhone 连接到网络时,我必须 ping 我的 iPhone IP 号码,然后运行“arp -a”,如果我不 ping,则需要一些时间才能识别 iPhone IP 号码;当我断开连接时,我需要 ping IP 地址,然后运行“arp -a”以显示更新的信息。我想知道是否有办法保持更新,可能不是“实时”,而是每 1-5 分钟使用 C#。

标签: c# mysql networking wireless


【解决方案1】:

如果您只是尝试在连接时插入 SQL 表并拥有一个 dd-wrt/open-wrt ​​路由器,您可以在路由器上编写一个简单的脚本,以在客户端连接或断开连接时提交 SQL 查询。

如果您没有支持 dd-wrt/open-wrt ​​的路由器,这很快就会变得更加困难。 Arp 是检测连接的好方法,但不能检测断开连接。您可以对所有已知的连接设备运行定期 ping 以确定断开连接。无论哪种方式,您都不能直接在 C# 中执行此操作。

【讨论】:

  • 有什么好方法可以 ping 一个 IP 范围(也许除了使用 for + ping 之外)?我想我会这样做以保持“ARP -A”表的更新,这会占用大量资源吗?
  • 这可能会有所帮助。 http://www.codeproject.com/Questions/188286/Ping-many-devices-simultaneously 如果您想同时 ping 多个 IP,System.Net.NetworkInformation.SendAsync 方法之一确实可以让您节省时间。我看到的唯一选择是创建相同数量的线程(最好使用线程池或 BackgroundWorker)并在每个单独的线程中同步 ping 每个单独的 IP。
  • 谢谢,它工作得很好,现在我遇到了另一个问题,当我 ping 我的 iPhone 时,我的 ms 数字很大,但我找到了这个解决方案:forums.macrumors.com/showthread.php?t=477141。当我的手机被阻塞时(一段时间不使用后屏幕变黑)我认为我无法再 ping iPhone,你知道吗?感谢您提供有用的答案。
猜你喜欢
  • 1970-01-01
  • 2012-03-23
  • 1970-01-01
  • 2018-08-24
  • 1970-01-01
  • 2016-09-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多