我有一个简单的脚本,可以定期(每隔几秒一次)验证该服务器是否有互联网连接。需要明确的是,它并不是要检查外部站点/服务/服务器是否处于事件状态。作为可靠的互联网目的地,我使用 google、yahoo 等网站的 IP。通常我使用 3 个目的地(LAN、ISP 网络、外部 ISP)
我当前负责此操作的代码只是对 ping
的简单而肮脏的调用:
my $pingResponse = `ping -c 1 -w 1 123.123.123.123`;
my $isConnected = parsePingResponse($pingResponse);
它似乎有效,但我确信这不是完成此任务的正确/最佳方法。至少有 3 个缺点:外部系统调用,速度慢,截止时间相对较长,为 1 秒。
所以,我的问题是:如何以 perlish 方式简单高效地实现 ping 功能,以验证互联网连接是否有效?
(我认为 LWP 是一种杀伤力。站点或页面是否可用并不重要,只要某些外部 IP 可达即可。可能它应该是涉及低级网络的简单东西)
最佳答案
最糟糕的方法是 Net::Ping .
my $p = Net::Ping->new;
if ($p->ping("123.123.123.123", 1)) {
print "Host is reachable\n";
}
如果您希望命令运行得更快,超时可以是 float (例如 0.5)。您需要选择适合您需要的超时;超时时间越长,互联网连接的可能性就越大,但需要的时间更长。
关于perl - 如何在 Perl 中检查互联网连接是否存在?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14875298/