Я работаю над утилитой для управления несколькими компьютерами в указанном домене (не обязательно доменом, на котором работает приложение, является членом) в пределах указанного корня каталога. Проблема, с которой я сталкиваюсь, - это когда у меня есть коллекция имен компьютеров из внешнего AD OU, я не могу управлять на основе имени компьютера из-за DNS. Можно ли выполнить поиск DNS на внешнем DNS-сервере, предоставив IP-адрес DNS-сервера и учетные данные для этого домена?C# Получить IP удаленного компьютера на отдельном DNS-сервере
Вот код, который у меня есть для процесса инициализации (работает в пределах одного домена). Очень цените любой вход!
private Task InitializeComputers()
{
try
{
Computers.Clear();
object cLock = new object();
PrincipalContext context = new PrincipalContext(ContextType.Domain, CurrentConfiguration.LDAPAddress,
CurrentConfiguration.DirectoryRoot, ContextOptions.Negotiate,
CurrentConfiguration.AdminUser, CurrentConfiguration.AdminPassword);
ComputerPrincipal computer = new ComputerPrincipal(context);
computer.Name = "*";
PrincipalSearcher searcher = new PrincipalSearcher(computer);
PrincipalSearchResult<Principal> result = searcher.FindAll();
Parallel.ForEach(result, (r) =>
{
ComputerPrincipal principal = r as ComputerPrincipal;
DirectoryObject cObject = new DirectoryObject(CurrentConfiguration)
{
Name = principal.Name
};
lock (cLock)
{
Computers.Add(cObject);
}
});
}
... // Catch stuff here
}
private async Task InitializeConnections()
{
Task[] tasks = Computers.Select(x => x.CheckConnectionAsync()).ToArray();
await Task.WhenAll(tasks);
}
// This is where I need to be able to get the IP Address. Thoughts???
public Task CheckConnectionAsync()
{
return Task.Run(() =>
{
try
{
Ping PingCheck = new Ping();
PingReply Reply = PingCheck.Send(Name); // <--- need IP Address instead
if (Reply.Status == IPStatus.Success)
{
IsAvailable = true;
IPHostEntry host = Dns.GetHostEntry(Name); // Does not work for machines on different domain.
IPAddress = host.AddressList.FirstOrDefault().ToString();
}
else
{
IsAvailable = false;
IsWMIActive = false;
}
}
... // catch stuff here ...
});
}
просто добавить полный домен для тех удаленных компьютеров, например 'machine.domain.tld', dns автоматически отправит запрос на DNS-серверы' domain.tld'. если вы просто сделаете 'machine', тогда он будет запрашивать' machine.jamie_still_domain.tld' –
Я уже дал этот снимок. Он по-прежнему возвращается с Host Not Found SocketExcpetions, когда я пытаюсь выполнить Dns.GetHostEntry (Name + "." + CurrentConfig.DomainName) перед пингом. Другая часть проблемы заключается в том, что она находится в закрытой корпоративной сети без возможности создавать зоны поиска для зоны DNS, на которой размещается моя машина, на которой установлено приложение (попытка тестирования с использованием лабораторных виртуальных машин в отдельном домене, доступ к которому IP, но не имя DNS). –
Попробуйте: http://stackoverflow.com/questions/8227863/dns-lookup-from-custom-dns-server-in-c-sharp –