2017-03-02 54 views
0

我在VS中构建了一个C#控制台应用程序,要求用户输入域名example.net并返回所有邮件记录(A,MX,SPF,DMARC,DKIM,CNAME)C# - 如何找到使用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和域密钥(DKIM)邮件记录?

+0

我并不仅限于此代码,但是这是我迄今为止唯一能够工作的代码?你有什么建议作为替代? DMARC和DKIM记录也是TXT记录,因此它们是否也应该退回? – kingcobra

+0

对不起,我的坏。你是对的....看看这个答案:http://stackoverflow.com/a/25167028/75852。我没有尝试过,但我希望它可以通过将记录类型更改为TXT而不是MX来工作。 – squillman

+1

我建议你使用ARSoft.Tools.Net nuget包来做这些事情,而不是nslookup。 – 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