使用できるコマンドラインプログラムはありますか?
質問は頭をひねる必要があると思います。 Active DirectoryはKerberosとNTLMの両方をサポートしています。 WindowsはまずKerberosを試し、すべての要件が満たされない場合はNTLMにフォールバックします。
たとえば、\ server1\shareのような名前でファイル共有にアクセスすると、Kerberosが呼び出され、適切な権限があれば成功するはずです。ただし、IPアドレスを使用して同じファイル共有にアクセスすると、最初にKerberosが呼び出されて失敗し(IPアドレスのSPNがないため)、次にNTLMにフェールオーバーします。
そのため、プログラムがADに対して認証をどのように試みているかを判別し、どのプロトコルが使用されているかを通知する必要があります。
何があなたにこの質問をするように促したのか知りたいです。
コンピューターがサーバーであろうとワークステーションであろうと、ログオンイベントを実際に監査する必要があります。システムにアクセスしているユーザーを特定し、セキュリティ関連の問題のトラブルシューティングを行うと役立ちます。
監査ポリシーは、グループポリシーを使用して変更できます。開始...実行... gpedit.msc ...コンピューターの構成、Windowsの設定、セキュリティの設定、ローカルポリシー、監査ポリシー、「ログオンイベントの監査」。 [成功]および[失敗]チェックボックスをオンにします。ログアウトしてログインし、Windowsセキュリティイベントログにいくつかの一般的な540イベントを確認してください。
NetstatはすべてのリッスンTCPおよびUDP接続を示します。オプション-naはすべての接続に使用され、名前またはポートの解決はありません。'b 'オプションは、それに関連するプログラムを表示します。DNSの場合が実行されていると、他の接続がたくさん表示される可能性があるため、TCPも指定する必要がある場合があります。
Kerberosは、Active Directoryドメインコントローラーを展開する場合に最も確実に実行されます。
netstat -nab
このツールを試すことができます。 http://blog.michelbarneveld.nl/media/p/33.aspx
これは、Webサイトで認証をテストするためのツールです。使用されている認証タイプが表示されます:Kerberos、NTLM、基本、なし。ただし、使用されるSPN、HTTPヘッダー、復号化されたNTLMおよびKerberos認証ヘッダーなどの情報も表示されます。また、Kerberosチケットを表示および削除することもできます。
ログオンイベントを監査していると仮定して、セキュリティイベントログを確認し、540イベントを探します。特定の認証がKerberosまたはNTLMのどちらで行われたかがわかります。
public string FindAllUsers()
{
string strReturn="";
try
{
DirectoryEntry directoryEntry = new DirectoryEntry("WinNT://" + Environment.UserDomainName);
string userNames = "";
string authenticationType = "";
foreach (DirectoryEntry child in directoryEntry.Children)
{
if (child.SchemaClassName == "User")
{
userNames += child.Name + Environment.NewLine; //Iterates and binds all user using a newline
authenticationType += child.Username + Environment.NewLine;
}
}
strReturn = userNames + "\n\n" + authenticationType;
//Console.WriteLine("************************Users************************");
//Console.WriteLine(userNames);
//Console.WriteLine("*****************Authentication Type*****************");
//Console.WriteLine(authenticationType);
}
catch (Exception)
{
Console.WriteLine("Network error occured.");
strReturn = "";
}
return strReturn;
}