4

I want to monitor the dns address changes. So i need to track dns changes. I am doing it with thread right now. I get dns and save it file and then i compare they every 10 sec but i need more specific solution. For exampe, is there any event for that? This is the code:

GetDns:

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;
    }

This is the compare:

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] );
                    }));
                }
        }
4

3 に答える 3

1

DNS はリクエストベースです。DNS サーバーからクライアントへのイベントはありません。DNS レコードの有効期限が切れるタイミングを通知する TTL (Time to Live) メタデータを使用できる可能性があります。

これは、API を公開して特定の dns サーバーSimpleDNSにクエリを実行するライブラリと、 TTL 値を取得するためのドキュメントです。

于 2012-10-31T14:35:03.450 に答える
0

WMI-Queries を使用して DNS にクエリを実行できます。クエリをループし、返された結果を前の結果と比較します。値が変更されたとき (またはイベントなどを発生させたとき) にメッセージボックスをポップアップします。

これを行うには、System.Management 名前空間を使用する必要があります。または、管理名前空間に dns を参照するための関数が含まれている可能性があります。しかし、これは確かではありません。

于 2012-10-31T14:27:09.517 に答える
0

@Candide が DNS にイベントがないと書いたように、それはまったく真実ではありません。特に変更通知の場合。

DNS サーバーを制御している場合は、クライアントとして NOTIFY メッセージを送信するように設定できます。このようなメッセージは、権限のある DNS サーバーがスレーブ サーバーにゾーン コンテンツの更新を要求するたびに送信されます (保証されているわけではありませんが、ほとんどの場合)。その後、好きな方法でそれらに反応できます。ほとんどの DNS サーバーの実装は、おそらく既定ではリストされたネーム サーバーにのみ NOTIFY メッセージを送信しますが、他のホストに送信するように構成することもできます (たとえば、BIND 9 では、これはalso-notify {}ゾーン構成のディレクティブを使用して行われます)。

どのように実装するかわかりません。NOTIFY は DNS プロトコルの一部であるため、基本的には、これらのメッセージをリッスンして処理するための限定的な目的の DNS サーバー実装を作成することになります。少なくとも、UDP と TCP でポート 53 を監視する必要があります (実際には通知はほとんどの場合 UDP で送信されますが、標準では TCP トランスポートも許可されていると思います)、受信した NOTIFY メッセージを整理し、対処する必要があります。彼ら。

また、配信が保証されていないため、フォールバック メカニズムも必要です。

これが実行可能なオプションであるかどうかは、完全に状況に依存します。

于 2012-11-01T13:30:18.300 に答える