6

我在这个答案中遇到了一个代码片段:Get IP address in a console application

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 = Dns.GetHostName(); 与 strHostName = "myServerName"; 但它只返回一个 IP。当我在服务器本身上运行程序时,我会获得分配给该服务器的所有 IP。目标是在我的计算机上运行该程序,从数据库表中读取服务器名称以获取 100 多台服务器上的 IP 地址。我试图避免必须登录到每台服务器并在每台服务器上运行程序来获取 IP 地址。

有趣的是,该代码适用于“www.google.com” - 此服务器与此服务器相关还是安全问题?

在我开始从数据库中获取数据之前,我需要让代码为一台服务器工作:) 希望能更好地解释它。谢谢!

4

2 回答 2

3

您是否混淆了 DNS 关于您尝试使用这些方法解析的名称与找出哪些 IP 地址实际绑定到您感兴趣的特定机器上运行的 TCP/IP 协议栈之间的区别?如果您想知道机器实际配置的 IP 地址,无论在 DNS 中注册或未注册的 IP 地址,您都需要查看使用 WMI 枚举机器上配置的地址。

请参阅文章:WMI 查询以获取 IP 地址、域名、操作系统版本

在上面的代码中,您只是要求运行代码的本地计算机使用其配置的 DNS 解析器,并告诉您哪些条目作为您用于查询的名称的 DNS 记录存在。这就是为什么当您尝试查询 www.google.com 之类的内容时可以获得值的原因。这是因为您只是在 DNS 中查找一个名称,并且由于这是一个可公开识别的名称,因此任何正确设置的 DNS 服务器都能够报告一个有效值。

这与可能绑定到服务器的 IP 地址非常不同。例如,想想位于防火墙后面的服务器。服务器实际上可能正在使用内部网络本地的 IP 地址,这些地址映射到防火墙上可公开访问的 IP 地址。在这种情况下,服务器知道的 IP 地址与其相应的 DNS 条目中显示的公共 IP 地址完全不同。

于 2012-10-10T22:55:00.880 回答
0

可能是服务器故意将其他 IP 从 DNS 中排除。此知识库文章 (975808) 中提供了此功能的一个很好的示例。

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

如果做不到这一点,您可能需要研究其他方法来查询 IP 地址。

于 2012-10-10T18:46:21.370 回答