【问题标题】:How to determinde dns changes in c#?c#中如何判断dns的变化?
【发布时间】:2012-10-31 14:23:03
【问题描述】:

我想监控 dns 地址的变化。所以我需要跟踪 dns 的变化。我现在正在用线程做。我得到 dns 并将其保存文件,然后我每 10 秒比较一次,但我需要更具体的解决方案。例如,有什么活动吗? 这是代码:

获取域名:

public List<string> GetDns()
    {
        List<string> dns = new List<string>();
        NetworkInterface[] networkInterfaces = NetworkInterface.GetAllNetworkInterfaces();
        foreach (NetworkInterface networkInterface in networkInterfaces)
        {
            if (networkInterface.OperationalStatus == OperationalStatus.Up)
            {
                IPInterfaceProperties ipProperties = networkInterface.GetIPProperties();
                IPAddressCollection dnsAddresses = ipProperties.DnsAddresses;
                foreach (IPAddress dnsAdress in dnsAddresses)
                {
                        dns.Add(dnsAdress.ToString());
                }
            }
        }
        return dns;
    }

这是比较:

string[] xmlDns = xmlData.GetDatas("DNSs", "Dns");
        List<string> dns = getData.GetDns();
        for (int i = 0; i < xmlDns.Length; i++)
        {
                if ( xmlDns[i].Equals( dns[i]))
                {
                    this.Invoke(new MethodInvoker(delegate()
                    {
                        listBoxCheck.Items.Add(xmlDns[i] + " DNS was not changed.");
                    }));
                }
                else
                {
                    this.Invoke(new MethodInvoker(delegate()
                    {
                        listBoxCheck.Items.Add(xmlDns[i] + " DNS adress was changed as " + dns[i] );
                    }));
                }
        }

【问题讨论】:

  • 你能展示你尝试过的代码吗

标签: c# events dns event-log


【解决方案1】:

DNS 是基于请求的。没有从 DNS 服务器到客户端的事件。您可能会使用 TTL(生存时间)元数据,它会告诉您 DNS 记录何时到期。

这是一个库,它公开 API 以查询给定的 dns 服务器 SimpleDNS 和获取 TTL value 的文档。

【讨论】:

  • 谢谢。我将对此进行调查。
【解决方案2】:

您可以使用 WMI 查询来查询您的 DNS。 循环查询并将返回的结果与之前的结果进行比较。 当值改变时弹出一个消息框(或触发你的事件或其他东西)。

您必须使用 System.Management 命名空间才能完成此操作,或者管理命名空间可能包含用于查看 dns 的功能。但是这个我不确定。

【讨论】:

    【解决方案3】:

    @Candide wrote that there is no event in DNS 并不完全正确。特别是对于变更通知。

    如果您控制 DNS 服务器,则可以将其设置为作为客户端向您发送 NOTIFY 消息。每当权威 DNS 服务器希望从属服务器更新区域内容时,就会(不保证,但最常见)发送此类消息。然后,您可以以您喜欢的任何方式对这些做出反应。默认情况下,大多数 DNS 服务器实现可能仅将 NOTIFY 消息发送到列出的名称服务器,但也可以配置为将它们发送到其他主机(例如,在 BIND 9 中,这是使用区域配置中的 also-notify {} 指令完成的)。

    我不确定您将如何实现它; NOTIFY 是 DNS 协议的一部分,因此您实际上是在编写一个用途有限的 DNS 服务器实现来侦听这些消息并对其采取行动。您至少需要监视 UDP 和 TCP 上的端口 53(我相信实际上通知几乎总是在 UDP 上发送,但该标准还允许 TCP 传输),整理收到的任何 NOTIFY 消息,然后采取行动他们。

    此外,由于不能保证它们会被交付,因此您还需要一个后备机制。

    这是否是一个可行的选择完全取决于具体情况。

    【讨论】:

      猜你喜欢
      • 2010-12-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-31
      • 2011-12-10
      • 2018-11-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多