perl - 如何在 Perl 中检查互联网连接是否存在?

标签 perl networking connection

我有一个简单的脚本,可以定期(每隔几秒一次)验证该服务器是否有互联网连接。需要明确的是,它并不是要检查外部站点/服务/服务器是否处于事件状态。作为可靠的互联网目的地,我使用 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/

相关文章:

用于从文件中替换换行符的 ruby​​ 等效 perl 命令?

asp.net - 如何在 Web 应用程序中获取客户端计算机的 Mac 地址

Android:如何获取当前的 Wifi 加密?

java - 无法获取隔离的 JDBC 连接 : org. hibernate.exception.JDBCConnectionException

perl - Perl 子例程从哪里获取实际参数中缺少的值?

perl - 如何在perl中将任何日期时间转换为微秒

perl - 在 Moose 中,如何对 arrayref setter 进行 uniq?

swift - NSURLSession/NSURLConnection HTTP 加载失败(kCFStreamErrorDomainSSL,-9802)

linux - 设置tcp超时

android - 没有网络连接时如何调用新布局?