C# - 如何使用C#找到域的DMARC和DOMAIN KEYS(DKIM)邮件记录?

时间:2017-03-02 19:45:41

标签: c# dns lookup dkim dmarc

我正在VS中构建一个C#Console应用程序,要求用户输入域,例如。 example.net 并返回所有邮件记录(A,MX,SPF,DMARC,DKIM,CNAME)

我使用了下面的示例,该示例将返回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)邮件记录?

2 个答案:

答案 0 :(得分:0)

每个DKIM密钥在不同的子域下都有自己的DNS txt记录,模式为*._domainkey.example.net

大多数DNS服务器不允许您枚举特定类型的所有记录或所有记录。这可以防止攻击者获得有关域下托管的服务的知识,还可以防止反射式攻击。找到所有DKIM密钥同样不可能找到在stackoverflow.com上运行的所有子域的列表。

要查找您知道名称的特定域密钥,只需为其主机名运行DNS查询。在您的示例中,它与使用主机名k1._domainkey.example.net调用该函数相同。您需要编写不同的正则表达式,以从域密钥记录中提取所需的值。

答案 1 :(得分:0)

我会使用类似ARSoft Tools for DNS的实用程序来指定文本记录。

第二,包含DKIM签名标头的消息还包括用于子域mail._domainkey.msn.com的“选择器”。其中“邮件”子域是选择器。

包含在DKIM签名标头中的是危害签名的标头。您将需要那些来验证消息的真实性。