【问题标题】:How to Get WebSite IP that doesn't Answer Pings?如何获取不响应 Ping 的网站 IP?
【发布时间】:2011-06-01 16:50:30
【问题描述】:

我正在尝试获取不响应 ping 的网站的 IP 地址 - 它们超时。

我正在尝试从 C# 应用程序而不是 Windows 中的命令输入屏幕执行此操作。我一直在使用 ping 命令,该命令在某些站点上超时,因此在那里没有用。

还有其他不需要网站响应的方式来获取这些信息吗?

【问题讨论】:

标签: web ip ping c#


【解决方案1】:

即使站点不响应 PING(服务器上未启用 ICMP 或被防火墙过滤),PING 命令仍应将站点名称解析为 IP 地址并向您显示该 IP 地址。

在 Windows 上检查 ping 命令的输出(以粗体显示的 IP 地址):

ping wikipedia.org

ping wikipedia.org [208.80.152.2] 32 字节 o
来自 208.80.152.2 的回复:字节=32 时间=245ms TTL=50
来自 208.80.152.2 的回复:bytes=32 time=235ms TTL=50

更新(由于更新的问题)

如果您尝试从 C# 应用程序获取 DNS 名称的 IP 地址,则应使用 Dns 类中的 GetHostEntry 方法:http://msdn.microsoft.com/en-us/library/ms143998.aspx

【讨论】:

    【解决方案2】:

    您从 DNS 获取 IP,并需要它来执行 ping,因此您已经拥有它。

    $ ping google.com
    PING google.com (74.125.227.51) 56(84) bytes of data.
    64 bytes from 74.125.227.51: icmp_seq=0 ttl=56 time=5.80 ms
    64 bytes from 74.125.227.51: icmp_seq=1 ttl=56 time=6.23 ms
    

    显示 IP。如果您没有获得 IP,您的 DNS 可能已关闭。

    你也可以试试nslookup google.com

    【讨论】:

    • 谢谢。不幸的是,我忽略了说我需要在代码中执行此操作。我在 C# 中使用 ping 对象来 ping 站点,但找不到 IP 在对象中的存储位置。由于超时,因此没有 PingReply。手动 nslookup 命令返回与 ping 相同的 IP,但将其列为非权威答案。假设有一个 .Net 版本的 nslookup,它是否具有显示 IP 地址的属性?
    • @Bill Corry,如果您尝试从 C# 应用程序获取 DNS 名称的 IP 地址,您应该使用 Dns 类中的 GetHostEntry 方法:msdn.microsoft.com/en-us/library/ms143998.aspx。更新您的问题,以便获得更新的答案。
    • 谢谢弗洛林:这正是我想要的。
    【解决方案3】:

    Dns.GetHostEntry() 中的主机名获取IP 地址。传入主机名,它会返回 IP 地址。

    您没有理由需要 ping(无论如何联系)站点来获取其 IP 地址。 DNS 查找将为您提供所需的内容。

    【讨论】:

      【解决方案4】:

      您可以使用 nslookup 来解析域名。

      nslookup google.com

      【讨论】:

        【解决方案5】:

        以下代码可用于对提供的主机名执行 DNS 查找。

        使用 DNS 将绕过访问目标服务器。它是一个独立的分布式目录服务,维护主机名到 IP 地址的查找。

        如果可以为提供的主机名解析 DNS 条目,则以下代码将给出主机的第一个返回 IP 地址。

            public void test()
            {
                string hostname = "google.com";
                IPAddress ipAdress;
        
                if (TryGetIpAddress(hostname, out ipAdress))
                {
                    Console.WriteLine("Host:'{0}', IP:{1}.", hostname, ipAdress);
                }
                else
                {
                    Console.WriteLine("Host '{0}' not found.", hostname);
                }
            }
        
            public bool TryGetIpAddress(string hostname, out IPAddress ipAddress)
            {
                const int HostNotFound = 11001;
                ipAddress = null;
        
                try
                {
                    IPHostEntry hostEntry = Dns.GetHostEntry(hostname);
        
                    ipAddress = hostEntry.AddressList[0];
                }
                catch (SocketException ex)
                {
                    if (ex.ErrorCode != HostNotFound) throw;
                }
        
                return (ipAddress != null);
            } 
        

        【讨论】:

          【解决方案6】:

          您可以使用tracert,它会解析IP地址并告诉您是否可以到达或停止。

          【讨论】:

          • 很遗憾,我没有问正确的问题。我需要使用可以放入代码的 C# 解决方案来执行此操作。我一直在使用 ping 命令,它在代码中或手动超时。通过手动解决方案,我可以看到打印出来的 IP,但我不确定相同的信息在哪里。由于没有创建 pingreply,我无法查看那里。 Ping 项目本身是否会以某种方式更新信息?
          【解决方案7】:

          如果站点 (http) 已启动并正在运行,那么很明显 sys/network 管理员禁用了 ping 并且很可能也禁用了跟踪路由实用程序。现在越来越普遍了。见here。您的替代方法是使用 ns 查找或 WHOIS 服务,如 here

          所述

          【讨论】:

            【解决方案8】:

            在代码中执行此操作,您应该有一些类似 gethostbyname() 的函数。

            这应该在 stackoverflow.com 上

            【讨论】:

              【解决方案9】:

              未经测试

              您可以托管此网站

              http://centralops.net/co/DomainDossier.aspx

              您可以使用 import.io 使网站具有功能性。

              https://www.import.io/

              这个链接可以给你一个洞察力

              【讨论】:

                猜你喜欢
                • 2015-07-01
                • 2012-04-10
                • 2012-09-21
                • 2013-06-20
                • 2012-04-30
                • 2019-04-07
                • 2013-02-24
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多