【问题标题】:Fast way to check existence of host检查主机是否存在的快速方法
【发布时间】:2012-01-10 09:06:40
【问题描述】:

在 C# 中:

如果我 ping 一个 url(例如“http://myurl.com”)并且该 url 不存在,我会得到一个 SocketException(不知道这样的主机)。此请求是确定地址是否存在的一种非常快速的方法。有没有类似的方法来检查 IP 是否“存在”?

显然可以ping通IP,但是如果主机位于中国(而我位于瑞典),那么ping时间会变得很长......

【问题讨论】:

  • 这里的“存在”是什么意思?
  • 还有一些主机被配置为不响应 ping
  • 如果您无法 ping 主机,则一定不是该主机不可访问。
  • 通过 java.net 捕获 UnknownHostException 是最好的方法。
  • 对不起,我以为你想要 java 的方式来做到这一点。刚才我知道您正在寻找 C# 代码。我对C#一无所知。阅读这篇文章 -codeproject.com/Tips/109427/How-to-PING-Server-in-C

标签: c#


【解决方案1】:

您的意思并不完全清楚。您可以使用Dns.GetHostEntry(string) 执行 DNS 解析,这会将名称(例如“myurl.com”)解析为主机条目(可能有很多地址)——但这不会告诉您是否有任何东西实际上在使用这些 IP 地址。

你想完成什么?通常如果你想知道一个特定的主机是否存在,那是因为你想使用特定的协议(例如 HTTP)与它交谈。在这种情况下,最好使用该协议发出请求 - 否则即使主机存在,也没有什么可以说它对您有用。

【讨论】:

  • 有时检查主机是否存在需要 5-6 秒。在那之后我就完全停止了检查。
【解决方案2】:

不,没有万无一失的方法来检查是否使用了 IP,因为该使用未在任何地方注册。

主机名检查速度快的原因是您无需与主机实际交谈即可确定主机名是否存在,它已在 DNS 系统中注册。

您所做的主机名检查并不能保证 主机 确实存在,只是存在从主机名到 IP 号的别名,主机很可能已关闭,而您将不会从那个查找中不知道。

此外,即使您使用 ping 来尝试确定是否使用了 IP,您也不确定,因为可能有防火墙阻止 ping,但仍然允许其他 IP 流量通过(例如 HTTP)。为了更好地了解主机是否可以满足您的请求,您最好使用您感兴趣的实际协议对其进行轮询。

【讨论】:

    【解决方案3】:

    尝试远程登录。 http://dotnettelnet.sourceforge.net/

    连接后,您确定您已到达您的 IP,然后立即发出关闭会话。否则ip不可达。

    【讨论】:

      猜你喜欢
      • 2013-03-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-07
      • 2013-05-20
      • 2012-03-08
      • 1970-01-01
      相关资源
      最近更新 更多