2017-03-02 2 views
0

VSにC#コンソールアプリケーションを作成しています。このアプリケーションでは、ユーザーにドメインなどを入力するように求めています。 example.netを返し、すべてのメールレコード(A、MX、SPF、DMARC、DKIM、CNAME)を返すC#を使用してドメインのDMARCおよびDOMAIN KEYS(DKIM)メールレコードを見つけるにはどうすればよいですか?

私は以下の例を使用してSPF TXTレコードの文字列を返しますが、DMARC DKIM TXT records .. Strange? - か否か?

私は_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

あなたはいつもあなたが望むdomainkeyの名前を知っていますか?システム管理者は任意の名前を付けられます。 k1と呼ばれるべきではないという条約はなく、実際にはこの名前のものはほとんど存在しません。 –

+0

はい、これは常にこれらの特定の名前になります。 – kingcobra

関連する問題