2017-03-02 15 views
0

VS에 사용자가 도메인 을 입력하도록 요청하는 C# 콘솔 응용 프로그램을 구축하고 있습니다. example.net 그리고 모든 메일 레코드 (A, MX, SPF, DMARC, DKIM, CNAME)를 반환합니다.C#을 사용하여 도메인의 DMARC 및 DOMAIN KEYS (DKIM) 메일 레코드를 찾는 방법은 무엇입니까?

아래 예는 SPF TXT 레코드 문자열을 반환하지만 DMARC는 반환하지 않습니다 및 DKIM TXT 레코드 .. 이상? - 안 그래요?

저는 _domainkey.example.netk1._domainkey.example.net (DKIM) 이후입니다.

나는 _dmarc.example.net (DMARC) 이후입니다.

private static IList<string> GetTxtRecords(string hostname) 
     { 
      IList<string> txtRecords = new List<string>(); 
      string output; 
      string pattern = string.Format(@"{0}\s*text =\s*""([\w\-\=]*)""", hostname); 

      var startInfo = new ProcessStartInfo("nslookup"); 
      startInfo.Arguments = string.Format("-type=TXT {0}", hostname); 
      startInfo.RedirectStandardOutput = true; 
      startInfo.UseShellExecute = false; 
      startInfo.WindowStyle = ProcessWindowStyle.Hidden; 

      using (var cmd = Process.Start(startInfo)) 
      { 
       output = cmd.StandardOutput.ReadToEnd(); 
      } 

      MatchCollection matches = Regex.Matches(output, pattern, RegexOptions.IgnoreCase); 
      foreach (Match match in matches) 
      { 
       if (match.Success) 
        txtRecords.Add(match.Groups[1].Value); 
      } 

      return txtRecords; 
     } 

DMARC 및 DOMAIN KEY (DKIM) 메일 레코드는 어떻게 받습니까?

+0

나는이 코드에만 국한되지 않지만, 지금까지 작동하도록 관리 한 유일한 코드는 무엇입니까? 대안으로 무엇을 제안합니까? DMARC 및 DKIM 레코드도 TXT 레코드이므로 반환하지 않아도됩니까? – kingcobra

+0

아, 미안해. 당신이 맞아 ....이 답변을보십시오 : http://stackoverflow.com/a/25167028/75852. 나는 그것을 시도하지는 않았지만 레코드 유형을 MX 대신 TXT로 변경하여 작동 할 것으로 기대합니다. – squillman

+1

nslookup이 아닌 ARSoft.Tools.Net nuget 패키지를 사용하는 것이 좋습니다. – Evk

답변

0

각 DKIM 키 *._domainkey.example.net

대부분의 DNS 서버를 사용하면 특정 유형의 레코드의 모든 레코드 또는 전부를 열거 할 수 없습니다 패턴과 다른 하위 도메인에서 자체 DNS TXT 레코드가 있습니다. 이렇게하면 공격자가 도메인에서 호스팅되는 서비스에 대한 지식을 얻지 못하게되고 반사 스타일 공격을 방지 할 수 있습니다. 모든 DKIM 키를 찾는 것은 stackoverflow.com에서 실행되는 모든 하위 도메인의 목록을 찾는 것과 똑같이 불가능합니다.

이름을 알고있는 특정 도메인 키를 찾으려면 해당 호스트 이름에 대한 DNS 쿼리를 실행하기 만하면됩니다. 귀하의 예에서는 호스트 이름이 k1._domainkey.example.net 인 해당 함수를 호출하는 것과 동일합니다. 도메인 키 레코드에서 원하는 값을 추출하려면 다른 정규식을 작성해야합니다.

+0

내가 원하는 것은 _domainkey.example.net 및 k1._domainkey.example.net입니다. – kingcobra

+0

원하는 도메인 키의 이름을 항상 알고 있습니까? 시스템 관리자는 임의의 이름을 부여 받았다는 것을 기억하십시오. k1이라는 이름을 지어야한다는 규칙이 없으며 실제로이 이름이있는 이름은 거의 없을 것입니다. –

+0

예, 항상 이러한 특정 이름입니다. – kingcobra