2009-05-29 39 views
0

写一个脚本来测试网络在接下来的24或48小时内是否停机很容易?我可以使用ssh连接到一个shell,并在48小时后回来查看它是否仍然连接,以查看网络是否已关闭,但是我可以通过编程方式轻松完成吗?容易编写脚本来测试网络是否在接下来的24小时内停机?

+0

如果您可以识别哪种平台以及对哪种脚本有任何限制,您可能会得到更具体的帮助。 Windows和* nix不同,足以使一般答案困难。 – RBerteig 2009-05-29 02:11:36

回答

2

互联网(和你的以太网)是一个分组交换网络,它使'down'的定义变得困难。

有些事情是显而易见的;例如,如果您的以太网卡没有报告链接,则表示链接已关闭(除非您有冗余连接)。但是,有一个链接并不意味着它的。

互联网如何工作的基本100英里视图是您的计算机将要发送的数据拆分为大约1500字节的数据包段。然后,它非常盲目地将它们发送出去,不过你的路由表表示。然后那台机器重复这个过程。最终,通过多次重复,它到达远程主机。

所以,你可能会试图定义up作为数据包到达目的地。但是,如果数据包遭到破坏,例如由于硬件故障或干扰,会发生什么?下一个路由器将丢弃它。好吧,没关系,你可能想考虑一下。如果路径上的路由器太忙,或者需要发送的链路已满,该怎么办?数据包将被丢弃。你可能不希望把这个数字计算在内。

数据包经常丢失;更高级别的协议(例如,TCP)处理它并重发分组。实际上,TCP使用链路完全行为上的数据包丢弃来发现链路带宽。

您可以使用ping等工具监控数据包丢失情况,如其他答案所述。

1

大多数平台都支持ping命令,该命令可用于查找IP地址是否存在于其他地方的网络路径。在哪里,检查取决于你真正想要回答的问题。

如果您的目标是发现您的第一跳到您ISP的网络的可靠性,那么定期ping一个路由器或他们的DNS可能就足够了。

如果你关心的是连接到单个节点(你提到的离开ssh会话打开这意味着这一点),那么只要ping该节点可能是最好的主意。命令ping通常会以脚本可以测试连接是否超时的方式失败。

无论如何,以每分钟不超过一次的速度进行检查可能是一个好主意,而慢于这可能就足够了。

2

如果您需要在本质上更行政管理中,并使用现有的软件是一种选择,你可以尝试像的monit:

 
http://mmonit.com/monit/ 

维基百科也有类似的软件列表:

 
http://en.wikipedia.org/wiki/Comparison_of_network_monitoring_systems 

您还应该考虑是否需要检测非常短的中断。显然,定期可达性测试不能保证检测到的中断时间短于测试间隔。

如果你只关心是否有停机,而不是有多少或有多长时间,你应该能够很容易地使用expect自动化你现有的技术ssh

 
http://expect.nist.gov/