如何检查Perl中是否存在Internet连接?

Art*_*rtM 7 connection perl networking

我有一个简单的脚本,定期验证(每隔几秒一次)是否有来自该服务器的互联网连接.要明确的是,它不是要检查外部站点/服务/服务器是否还活着.作为可靠的互联网目的地,我使用谷歌,雅虎等网站的IP.通常我使用3个目的地(局域网,ISP网络,外部ISP)

我目前负责的代码只是一个简单而肮脏的调用ping:

    my $pingResponse = `ping -c 1 -w 1 123.123.123.123`;
    my $isConnected = parsePingResponse($pingResponse);
Run Code Online (Sandbox Code Playgroud)

它似乎有效,但我确信它不是完成此任务的正确/最佳方式.至少有3个缺点:外部系统调用,它很慢,它有一个相对较长的最后期限为1秒.

所以,我的问题是:如何简单有效地实现ping功能的perlish方式,以验证互联网连接是否还活着?

(我认为LWP是一种矫枉过正.如果一个站点或一个页面可用,这是不重要的,只要一些外部IP可以访问.可能它应该是一个简单的涉及低级网络)

rjh*_*rjh 6

这样做的方法是Net :: Ping.

my $p = Net::Ping->new;
if ($p->ping("123.123.123.123", 1)) {
    print "Host is reachable\n";
}
Run Code Online (Sandbox Code Playgroud)

如果您希望命令运行得更快,则超时可能是浮点数(例如0.5).您需要选择适合您需求的超时; 更高的超时更可能是关于互联网连接的正确,但需要更长的时间.