我正在VS中构建一个C#Console应用程序,要求用户输入域,例如。 example.net 并返回所有邮件记录(A,MX,SPF,DMARC,DKIM,CNAME)
我使用了下面的示例,该示例将返回SPF TXT记录的字符串,但不返回DMARC和DKIM TXT记录。奇怪? - 或不?
我在_domainkey.example.net
和k1._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 :(得分: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签名标头中的是危害签名的标头。您将需要那些来验证消息的真实性。