获取分配给服务器的所有IP地址

6

我在这个回答中找到了一段代码片段:在控制台应用程序中获取IP地址

using System; 
using System.Net; 


namespace ConsoleTest 
{ 
    class Program 
    { 
        static void Main() 
        { 
            String strHostName = string.Empty; 
            // Getting Ip address of local machine... 
            // First get the host name of local machine. 
            strHostName = Dns.GetHostName(); 
            Console.WriteLine("Local Machine's Host Name: " + strHostName); 
            // Then using host name, get the IP address list.. 
            IPHostEntry ipEntry = Dns.GetHostEntry(strHostName); 
            IPAddress[] addr = ipEntry.AddressList; 

            for (int i = 0; i < addr.Length; i++) 
            { 
                Console.WriteLine("IP Address {0}: {1} ", i, addr[i].ToString()); 
            } 
            Console.ReadLine(); 
        } 
    } 
} 

当我在本地运行代码以获取计算机的IP地址时,此代码可以正常工作。我试图使用该代码来获取网络上服务器的IP地址。所以,基本上我尝试用strHostName =“myServerName”替换strHostName = Dns.GetHostName(); 但它只返回一个IP。当我在服务器本身上运行程序时,我得到了分配给该服务器的所有IP。目标是在我的计算机上运行程序,从数据库表中读取服务器名称以获取100多个服务器的IP地址。我试图避免必须登录到每个服务器并在每个服务器上运行程序以获取IP地址。
有趣的是,代码对“www.google.com”有效 - 这是否与服务器相关还是安全问题?
在我可以开始从数据库获取数据之前,我需要让该代码在一个服务器上正常工作:) 希望这样解释清楚了。谢谢!

我无法理解你的问题。请考虑编辑一下以澄清你想要做什么。你能远程连接到服务器并在那里运行程序吗?也许 这个链接 会有所帮助? - kush
2个回答

3
你是否混淆了使用这些方法解析名称时DNS所说的内容与查找绑定到特定机器上运行的TCP/IP协议栈的实际IP地址之间的区别?如果您想知道机器实际配置的IP地址,而不管DNS中是否注册,您需要查看使用WMI枚举在机器上配置的地址。
请参阅文章:WMI Query to get IP Address, Domain Name, OS Version 在您上面的代码中,您只是要求正在运行代码的本地计算机使用其配置的DNS解析器,并告诉您查询使用的名称的DNS记录条目。这就是为什么当您尝试查询www.google.com之类的东西时,可以获得一个值。因为您只是在DNS中查找名称,由于那是公认的名称,任何正确设置的DNS服务器都能报告有效值。
这与服务器可能绑定的IP地址非常不同。例如,考虑一个坐落在防火墙后面的服务器。该服务器实际上可能使用映射到防火墙上的公共可访问IP地址的内部网络的本地IP地址。在这种情况下,服务器知道的IP地址与对应的DNS条目中显示的公共IP地址完全不同。

0

可能服务器有意地将其他IP从DNS中排除在外。可以在此KB文章(975808)中找到此功能的一个很好的示例。

尝试使用GetHostAddress()并验证是否获得相同的结果。请参阅MSDN:gethostaddress()

如果仍无法解决问题,则可以考虑其他查询IP地址的方法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接