Получите список компьютеров в сети, их IP-адреса и пути UNC.C#

Место общения программистов C#
Ответить
Anonymous
 Получите список компьютеров в сети, их IP-адреса и пути UNC.

Сообщение Anonymous »

Я работал над этим всю последнюю неделю, испробовал массу разных подходов и не нашел ничего, что работало бы стабильно.
По сути, я пытаюсь создаю свой собственный FolderDialog, и у меня локальные диски работают отлично, но я не могу заставить работать сетевые диски/общие ресурсы...
Я решил разбить это на более мелкие части, чтобы попробовать чтобы разработать эту функцию, но даже там я застрял.
Поэтому я пытаюсь создать фрагмент кода, который будет возвращать список имен компьютеров, IP-адресов и UNC. Пути других компьютеров в сети.
Ничто из того, что я пробовал, не помогло, и я пробовал много разных подходов (некоторые из них я подробно опишу ниже).Я понимаю, что подход к извлечению сетевых компьютеров в домене будет отличаться от подхода к одноранговой сети без домена, поэтому в идеале мне бы хотелось что-то, что каким-то образом работало бы для обоих...< /p>
Но нашел ли кто-нибудь работающий и эффективный способ получить список компьютеров в сети? Вот некоторые из подходов, которые я пробовал. Ни один из них не помог.
Я очень ценю помощь!
1)
DataTable resultDT = new DataTable();
resultDT.Columns.Add("ComputerName", typeof(string));
resultDT.Columns.Add("ComputerUNCPath", typeof(string));
resultDT.Columns.Add("IPAddress", typeof(string));

string WG = ComputerWorkgroupNameString(); //This does work.

try
{
// Create a directory entry for the WinNT provider with the workgroup name
DirectoryEntry workgroup = new DirectoryEntry("WinNT://" + WG);

foreach (DirectoryEntry child in workgroup.Children)
{
// Filter out non-computer entries (e.g., schemas)
if (child.SchemaClassName == "Computer")
{
// Retrieve IP address (if available)
var ipAddress = child.Properties["IpAddress"].Value;
resultDT.Rows.Add(child.Name, "", ipAddress);
}
}
}
catch (Exception ex)
{

}
try
{
Domain domain = Domain.GetCurrentDomain();
DomainControllerCollection domainControllers = domain.DomainControllers;

foreach (DomainController dc in domainControllers)
{
resultDT.Rows.Add(dc.Name, "", dc.IPAddress);
}
}
catch (ActiveDirectoryOperationException ex)
{

}
// Получить все сетевые интерфейсы
NetworkInterface[] networkInterfaces = NetworkInterface.GetAllNetworkInterfaces();
foreach (NetworkInterface nic in networkInterfaces)
{
if (nic.OperationalStatus == OperationalStatus.Up)
{
resultDT.Rows.Add(Environment.MachineName, "", nic.GetIPProperties().UnicastAddresses[0].Address);
}
}
// Создайте запись каталога для Поставщик WinNT
DirectoryEntry root = new DirectoryEntry("WinNT:");
// Iterate through the children (computers) in the root
foreach (DirectoryEntry computers in root.Children)
{
foreach (DirectoryEntry computer in computers.Children)
{
// Filter out non-computer entries (e.g., schemas)
if (computer.SchemaClassName == "Computer")
{
//Console.WriteLine(computer.Name);
resultDT.Rows.Add(computer.Name, "");
}
}
}


Подробнее здесь: https://stackoverflow.com/questions/787 ... -unc-paths
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»