【问题标题】:DNS servers changed event?DNS 服务器更改事件?
【发布时间】:2024-04-23 20:05:01
【问题描述】:

我正在编写一个在 Windows 上运行的 .Net 4 应用程序,用于监控 PC 当前是否连接到特定的内部网络。为了确定网络连接是否存在,我计划测试一个 DNS 名称解析——如果成功,PC 就在网络上。 (如果有一种不太依赖网络的更好方法,请分享!)

我需要知道的是,我可以在我的代码中设置一个在客户端 PC 的网络 DNS 查找服务器更改时触发的事件处理程序(或其他东西)吗?例如,如果客户端通过 VPN 客户端连接,那么新的 DNS 查找服务器将被添加到网络环境中。作为回应,我的代码应该(重新)尝试 DNS 名称解析。

有人知道如何设置这样的事件处理程序吗?或者,是否有更好的网络更改事件需要注意(例如 VPN 连接上线等)?

【问题讨论】:

    标签: .net events networking dns notifications


    【解决方案1】:

    我不知道 DNS 列表更改时“触发”了任何特定的 .net 事件,如果您检测到任何有趣的更改,您肯定可以监控网络状态并引发自定义事件,然后您在附加的处理程序中执行某些代码到那个自定义事件。希望这会有所帮助。

    【讨论】:

    • 你能提供任何合适的“网络事件”的例子吗?而且,有没有办法避免“轮询”系统来监控变化? (实际上,我不介意轮询,只要它不产生网络流量并且不是 CPU 密集型的)。谢谢!
    【解决方案2】:

    作为另一种选择,您是否考虑过使用WMI 尝试连接到远程计算机?只要您有管理权限并且在远程计算机上安装了 WMI 对象,这将允许您测试您的连接。例如

    var connection = new ConnectionOptions 
        { Username = "username", Password = "password" }
    
    var ms = new ManagementScope(@"\\RemoteComputerName\root\CIMV2", connection);
    
    try
    {
       ms.Connect();
    }
    catch(Exception ex)
    {
      // Connection Failure
    }
    

    【讨论】:

    • 抱歉,我的场景中没有“远程”机器。我正在编写一个本地运行的应用程序来监视其运行的机器。然而,在某些时候,我可能最终会在本地使用 WMI。