[英]C# - Get Operating System from IP address / DNS Name
我们正在编写一个管理服务器的应用程序,我需要能够查看网络中任何远程机器上正在运行的操作系统。
我们不会始终拥有查看此信息的凭据,因此 WMI 不是解决方案。
我只需要知道它是运行 Windows、Linux 还是其他。 以及操作系统的版本是什么。
目前,我们正在从这些服务器上的数据库中获取此信息。 但是我想在不询问数据库的情况下执行此操作。
如果我只有 IP 地址或 DNS 名称,是否可以获得此信息? 没有凭据。 AC#/.Net Core 解决方案将是理想的。 或者任何可以实现这一点的协议也可以工作,我会将其转换为 C#。
结论
因此,根据可用和不可用的内容,以下是提出的选项。
你做的类似于CMDB库存扫描,windows和linux有不同的策略。 首先,决定是使用代理还是无代理。
如果您走代理路线,则编写一个小型 .net 应用程序,该应用程序公开一个端口以进行查询并为两者提供特定于操作系统的实现。 然后让您的 IT 部门在所有东西上安装它。
无代理有点棘手。 首先寻找应该为管理功能打开的端口(Windows 上的 WinRM - 尽管这里要小心 - 默认情况下它是关闭的,Linux 上是 SSH),或者你知道你的 IT 部门默认提供的任何服务(希望在他们的基础 VM 上)图片)。 如果启用了 WinRM/SSH,并且您拥有可以通过编程方式查询的密码存储,那么您就可以执行远程登录并运行您需要的任何代码来提取任何进一步的信息。 当您说您没有密码时,您能做的最好的事情就是根据暴露的端口进行猜测。
您可以利用 UserAgent 字符串
来自 MSDN 文档:
当您请求网页时,您的浏览器会向托管您正在访问的站点的服务器发送许多标头,如下所示。
GET / HTTP/1.1
Accept: text/html, application/xhtml+xml, */*
Accept-Language: en-US
User-Agent: Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv:11.0) like Gecko
Accept-Encoding: gzip, deflate
Proxy-Connection: Keep-Alive
Host: microsoft.com
平台令牌将描述您的操作系统(也在链接中)
你可以这样查询
String ua = Request.UserAgent;
if (ua.Contains("Windows NT 10"))
return "Windows 10";
else if (ua.Contains("Linux"))
return "Linux"
链接: https : //docs.microsoft.com/en-us/previous-versions/windows/internet-explorer/ie-developer/compatibility/ms537503(v=vs.85)?redirectedfrom=MSDN
或者
Request.Headers["User-Agent"].ToString();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.