2012-10-31 7 views
4

DNS 주소 변경을 모니터링하고 싶습니다. 그래서 나는 DNS 변경 사항을 추적해야합니다. 지금 당장 실을 쓰고 있어요. 나는 DNS를 가져 와서 파일을 저장하고 10 초마다 비교하지만 더 구체적인 해결책이 필요합니다. 예를 들어, 거기에 어떤 사건이 있습니까?C에서 DNS 변경 사항을 확인하는 방법은 무엇입니까?

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

이 인 비교 : 당신은 당신의 DNS를 쿼리하는 WMI-쿼리를 사용할 수

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

시도한 코드를 표시 할 수 있습니까 –

답변

0

. 쿼리를 반복하고 반환 된 결과를 이전 결과와 비교합니다. 값이 변경되거나 이벤트가 발생하면 messagebox가 표시됩니다.

이 작업을 수행하려면 System.Management 네임 스페이스를 사용해야합니다. 그렇지 않으면 관리 네임 스페이스에 dns를 보는 기능이 포함되어있을 수 있습니다. 그러나 나는 이것이 확실하지 않다.

+0

포스터는 이미 이것을 수행합니다 ... – Mr47

1

DNS는 요청 기반입니다. DNS 서버에서 클라이언트까지 이벤트가 없습니다. 잠재적으로 DNS 레코드가 만료되는시기를 알려주는 TTL (Time to Live) 메타 데이터를 사용할 수 있습니다.

다음은 주어진 DNS 서버 SimpleDNSTTL value을 가져 오기위한 문서를 쿼리하는 API를 제공하는 라이브러리입니다.

+0

고마워요. 나는 그것을 조사 할 것이다. – mburakerbay

0

@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가 실제로는 UDP로 보내지지만 표준에서도 TCP 전송이 가능하다고 생각합니다.)받은 모든 NOTIFY 메시지를 정렬하고 그들.

또한 배달이 보장되지 않으므로 대체 메커니즘이 필요합니다.

실행 가능한 옵션인지 여부는 전적으로 상황에 따라 다릅니다.

관련 문제