【问题标题】:How to check if a host is unreachable?如何检查主机是否无法访问?
【发布时间】:2012-01-10 05:41:20
【问题描述】:

我正在尝试获取 ping 主机的不可达条件,因为我分别获得了 up 和 down 的 (0,1) 值,我将如何获得任何条件“2”,它告诉我不可达 ping 主机?

我的代码,

import java.net.InetAddress;

public class PingExample 
{
public static void main(String[] args)
{
try
{
InetAddress address = InetAddress.getByName("172.16.2.0");
// Try to reach the specified address within the timeout
// periode. If during this periode the address cannot be
// reach then the method returns false.
boolean reachable = address.isReachable(10000);
System.out.println("Is host reachable? " + reachable);
} catch (Exception e)
{
e.printStackTrace();
}
}
}

什么是主动和被动状态?如何查看?


编辑:参见此链接第 26 页 http://nagios.sourceforge.net/docs/ndoutils/NDOUtils_DB_Model.pdf

stat 列描述。我想得到这个结果,因为我已经发布了我的代码,那么我将如何获得该列“状态”?请记住,我正在为“n”个主机使用循环。

【问题讨论】:

  • 我无法理解你的问题。
  • @STephen 我可以通过我的这段代码启动或关闭我怎么知道主机无法访问??
  • 你对我来说仍然没有意义。您问题中的代码测试是否可以访问主机。请仔细阅读InetAddress.isReachable() 方法的javadoc ...。
  • @Stephen 是的,我正在按照您上面所说的那样做,但主要是任何一个主机都可以访问或不可以访问,所以我可以使用这两个条件来显示任何一个主机都会启动或关闭怎么样主机无法访问我将如何显示该主机无法访问??

标签: java networking ping icmp


【解决方案1】:

“Up”表示主机被 ping “down”表示尝试 ping 但失败,因为 sys 已关闭,“unreachable”表示它尝试 ping 但连接未完成,因此它会告诉被 ping 的主机是“up”或“下”!

从技术角度来看,这没有任何意义,我怀疑这意味着您尝试做的事情也没有任何意义。

记录在案:

  • Ping 不涉及建立连接。这是一个简单的请求和响应。发生的情况是发送了 ICMP Echo Request 数据包,然后您等待几秒钟以查看是否收到 ICMP Echo Reply 数据包。

  • 如果数据包无法路由,您可能还会收到 ICMP Network Unreachable 或 ICMP Host Unreachable ...。

  • 你也可能得到……什么也没有。您无法可靠地区分“系统已损坏/关闭”、“数据包被网络丢失”、“数据包被过滤掉”和“系统不存在”。这些都给你......在某些情况下没有回复。

  • 如今,对 ping 的响应(或不响应)通常是由于防火墙阻止了不需要的流量等。

那么这一切意味着不可能可靠地区分“关闭”和“无法访问”......即使您可以对具有技术意义的区别提供解释。

而且我们还没有讨论这些信息中有多少会返回到 Java 应用程序。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-13
    • 1970-01-01
    • 1970-01-01
    • 2023-03-13
    • 1970-01-01
    • 2015-07-26
    相关资源
    最近更新 更多