从远程服务器获取多个 IP - ASP.NET MVC3

本文关键字:IP ASP NET MVC3 服务器 获取 | 更新日期: 2023-09-27 18:36:40

寻求一些建议,如果有人知道我想做的事情是否可行。 让我先解释一下这个场景。

主网络服务器

  • 视窗服务器 2008 R2
  • IIS 7.5
  • .NET 4.0 框架
  • ASP.NET MVC3 应用程序
服务器

群集(x10 服务器):

    Windows Server
  • 2003/Windows Server 2008 R2
  • IIS
  • 6/IIS 7.5
  • .NET 2.0+ 框架
  • 第一个网卡有一个用于服务器的物理 IP 地址
  • 第二个 NIC 有 10 个虚拟 IP 地址,每个地址用于 IIS 管理器中的网站

我正在尝试做的是使用在主Web服务器上运行的MVC3网站连接到服务器群集并返回每台服务器上的虚拟IP地址列表,然后将其存储在MS SQL数据库中。 这是否可能,可以通过 .NET 网站完成吗? 我相信我可以尝试编写一个Powershell脚本,因为每个服务器上都有Powershell 1+。

从远程服务器获取多个 IP - ASP.NET MVC3

下面是

一些使用 WMI 查找分配给服务器上所有 NIC 的所有 IP 的代码。 您可以在此处查找Win32_NetworkAdapterConfiguration表中可用的其他字段。

请注意,这可能不够快,无法从网页实时运行。 我有类似的东西在工作,但我有一个预定的任务,每天去和我所有的服务器交谈一次。 然后网页只是从数据库中读取信息。

另请注意,此代码假定当前用户在远程服务器上具有足够的访问权限。 这是使其成为计划任务的另一个原因。 您可以以管理员身份运行任务以收集数据,然后常规 IIS 用户可以从数据库中读取数据。 否则,您必须更改运行 IIS 的用户才能为其提供足够的权限。

// You'll need to reference "System.Management" for this to work...
var server = "your server name";
var scope = new System.Management.ManagementScope(@"''" + server + @"'root'cimv2");
scope.Connect();
using (var searcher = new System.Management.ManagementObjectSearcher(scope,
        new System.Management.ObjectQuery(
            "Select Caption, IPAddress FROM Win32_NetworkAdapterConfiguration")))
{
    using (var children = searcher.Get())
    {
        if (children.Count > 0)
        {
            foreach (var item in searcher.Get())
            {
                var nicName = item["Caption"];
                var ips = item["IPAddress"] as string[];
                if (ips != null)
                {
                    Console.WriteLine(nicName);
                    foreach (var ip in ips)
                    {
                        Console.WriteLine("   " + ip);
                    }
                }
            }
        }
    }
}