最近我被要求对一个跟踪文件做一些分析,它的持续时间只有161秒,包含了260多万帧。我惊讶地发现,这些帧中大约75%是ping请求或ping回复。如果我没有识别出源IP地址,我就会下结论说目标是受到了拒绝服务攻击。相反,我了解到他们使用STCP的ping命令中的"run_forever"参数来监控目标的可到达性。
与大多数UNIX或Linux系统中的ping命令不同,STCP的ping命令在收到ping回复和下一个ping请求之间不会暂停。由于默认的ping次数只有4次,这并不是一个重要的问题。但是,当使用count参数或run_forever参数增加请求的数量时,会对系统、以太网适配器和网络造成很大的负荷。这使得STCP的ping命令的默认行为完全不适合对目标主机进行长期监控。
但是,默认的行为不适合,并不意味着不能使用ping命令进行长期监控。诀窍是重复执行命令每次发送一个ping请求,而不是执行一次命令就连续发送ping请求。下面的宏就可以做到这一点。
& ping_forever begins here |
如你所见,前两个参数是直接传给ping命令的,对应ping的host和timeout参数。Ping的默认超时时间是15秒,但我认为这个时间太长了,在宏中我将其改为1秒。当然,你可以在宏中或者通过提供一个值作为参数来调整它。第三个参数是ping之间暂停的秒数,默认是1秒。因为运行宏和加载并执行ping命令需要时间,所以实际ping之间的时间会更长一些。Packet_monitor显示的时间在1.05到1.1秒之间。最后一个参数是UNIX或Linux ping不会给你的东西--每次ping的时间戳,这样你就可以知道目标何时停止响应,何时再次开始。如果你不想要时间戳,你可以用 -no_timestamp 参数关闭它们。
ping_forever 164.152.77.6 *** 09-08-30.11:45:38 *** Pinging host 164.152.77.6 : 164.152.77.6 ICMP Echo Reply:TTL 60 time = 2 ms Host 164.152.77.6 replied to the ping *** 09-08-30.11:45:40 *** Pinging host 164.152.77.6 : 164.152.77.6 ICMP Echo Reply:TTL 60 time = 2 ms Host 164.152.77.6 replied to the ping *** 09-08-30.11:45:41 *** Pinging host 164.152.77.6 : 164.152.77.6 ping: No reply. Time Out !! Host 164.152.77.6 didn't reply to the ping *** 09-08-30.11:45:44 *** Pinging host 164.152.77.6 : 164.152.77.6 ping: No reply. Time Out !! Host 164.152.77.6 didn't reply to the ping *** 09-08-30.11:45:47 *** Pinging host 164.152.77.6 : 164.152.77.6 ICMP Echo Reply:TTL 60 time = 4 ms Host 164.152.77.6 replied to the ping *** 09-08-30.11:45:48 *** Pinging host 164.152.77.6 : 164.152.77.6 ICMP Echo Reply:TTL 60 time = 3 ms Host 164.152.77.6 replied to the ping |