我想扫描网络并枚举所有 Windows 机器的主机名。有一个接口方法将 IP 范围作为输入并返回主机名。我必须实施它。所以,这是我的代码:
public ICollection<string> EnumerateWindowsComputers(ICollection<string> ipList)
{
ICollection<string> hostNames = new List<string>();
foreach (var ip in ipList)
{
var hostName = GetHostName(ip);
if (string.IsNullOrEmpty(hostName) == false)
{
hostNames.Add(hostName)
}
}
return hostNames;
}
private static string GetHostName(string ipAddress)
{
try
{
IPHostEntry entry = Dns.GetHostEntry(ipAddress);
if (entry != null)
{
return entry.HostName;
}
}
catch (SocketException ex)
{
System.Console.WriteLine(ex.Message + " - " + ipAddress);
}
return null;
}
此方法枚举所有windows机器成功,但里面有网络打印机。我可以轻松忽略打印机的主机名,但这不是一个好的解决方案。我必须确保只返回装有 Windows 操作系统的设备。
知道如何在没有第三方库的情况下做到这一点吗?如果有更好的方法,我们不必使用GetHostName
方法。
没有按预期找到 PS Linux、MacOS、Android 和 IOS 设备。