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

时间:2013-10-23 19:10:37

标签: c# asp.net asp.net-mvc-3 iis

寻找一些建议,如果有人知道我想做什么甚至是可能的。我先解释一下这个场景。

主WebServer

  • Windows Server 2008 R2
  • IIS 7.5
  • .NET 4.0 Framework
  • ASP.NET MVC3应用程序

服务器群集(x10服务器)

  • Windows Server 2003 / Windows Server 2008 R2
  • IIS 6 / IIS 7.5
  • .NET 2.0+ Framework
  • 第一个NIC有一个服务器的物理IP地址
  • 第二个NIC在IIS管理器中为每个网站提供10个虚拟IP地址

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

1 个答案:

答案 0 :(得分:2)

下面是一些代码,它使用WMI查找分配给服务器上所有NIC的所有IP。您可以在Win32_NetworkAdapterConfigurationhere中查找其他可用字段。

请注意,这可能不够快,无法从网页上直播。我有类似的工作,但我有一个预定的任务,每天与我的所有服务器谈一次。然后网页只是从数据库中读取信息。

另请注意,此代码假定当前用户对远程服务器具有足够的访问权限。这是使其成为计划任务的另一个原因。您可以以管理员身份运行任务以收集数据,然后常规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);
                    }
                }
            }
        }
    }
}