Alvi
- 📅 2026-03-24T17:18:48.918Z
- 👁️ 21 katselukertaa
- 🔓 Julkinen
using System;
using System.Collections.Concurrent;
using System.Collections.Generic;
using System.DirectoryServices;
using System.Net.NetworkInformation;
using System.Net;
using System.Threading.Tasks;
public class NetworkScanner
{
public class OnlinePC
{
public string Hostname { get; set; }
public string IPAddress { get; set; }
}
public static async Task<List<OnlinePC>> GetOnlineDomainComputersAsync()
{
var onlinePCs = new ConcurrentBag<OnlinePC>();
var computerNames = GetAllDomainComputers();
var tasks = new List<Task>();
foreach (var name in computerNames)
{
tasks.Add(Task.Run(async () =>
{
try
{
using (Ping ping = new Ping())
{
var reply = await ping.SendPingAsync(name, 1000);
if (reply.Status == IPStatus.Success)
{
onlinePCs.Add(new OnlinePC
{
Hostname = name,
IPAddress = reply.Address.ToString()
});
}
}
}
catch
{
// Ignore failures (offline/unreachable)
}
}));
}
await Task.WhenAll(tasks);
return new List<OnlinePC>(onlinePCs);
}
private static List<string> GetAllDomainComputers()
{
var computers = new List<string>();
using (DirectoryEntry entry = new DirectoryEntry("LDAP://RootDSE"))
{
string defaultNamingContext = entry.Properties["defaultNamingContext"].Value.ToString();
using (DirectoryEntry searchRoot = new DirectoryEntry($"LDAP://{defaultNamingContext}"))
using (DirectorySearcher searcher = new DirectorySearcher(searchRoot))
{
searcher.Filter = "(objectClass=computer)";
searcher.PropertiesToLoad.Add("name");
foreach (SearchResult result in searcher.FindAll())
{
if (result.Properties.Contains("name"))
{
computers.Add(result.Properties["name"][0].ToString());
}
}
}
}
return computers;
}
}
var onlineMachines = await NetworkScanner.GetOnlineDomainComputersAsync();
foreach (var pc in onlineMachines)
{
Console.WriteLine($"{pc.Hostname} - {pc.IPAddress}");
}