gpt4 book ai didi

perl - 系统函数 "ping"和 Net::Ping 模块在 perl 中的区别?

转载 作者:行者123 更新时间:2023-12-02 05:11:36 25 4
gpt4 key购买 nike

据我所知,有两种方法可以通过perl找到可ping通的ip,分别是

 1. Using system Ping Command.
2. Using Net::Ping Module.

我尝试通过以上两种技术调用IP的可ping状态。

我在这些方法中遇到了一个问题,即系统 ping 命令对一个 IP 返回 true。但是,对于同一 IP,Net::Ping 模块返回 false。

我不知道哪个是正确的。任何人都请建议我更喜欢找到可 ping IP 的正确方法。我在下面编写了示例代码片段:

#!/usr/bin/perl
use strict;
use Net::Ping;

my $ip_address = $ARGV[0];
chomp($ip_address);

#Using Net::Ping Module

my $p = Net::Ping->new();


if ( $p->ping($ip_address) ) {
print "Step - 1: Success!\n";
}
else {
print "Step - 1: Fail!\n";
}


#Using System Command

$retval=system("ping -c 2 $ip_address");

if ($retval==0) {
print "Step - 2: Success!\n";
} else {
print "Step - 2: Fail!\n";
}

print "\n\n\ Step2: $retval\n\n";

对于某些 IP 地址系统命令返回成功而 Net::Ping 返回失败。这两种方法有什么区别吗?

谢谢,马丹

最佳答案

一个区别是ping 的大多数低级实现使用ICMP 数据包,而Net::Ping请注意,TCP 是默认设置。默认情况下,它还会发送到可能在特定机器上被阻止的回显端口 (7)。如果要发送 ICMP 数据包,则必须将 ICMP 指定为构造函数中的第一个参数。

由于您使用的是默认设置,所以我认为这些是主要区别。此外,ICMP 没有“端口”,而 TCP 显然

不过,我喜欢对 Net::Ping 使用 TCP 的解释。 Net::Ping - 对于它所使用的服务器 - 让您更好地了解哪些服务器已启动并响应,而不是仅仅连接到网络并可以弹回 ICMP 数据包。

但是,如果您只想使用系统 ping,doco 指出您可以使用关键字 'external' 作为“协议(protocol)”来调用系统 ping 命令。

关于perl - 系统函数 "ping"和 Net::Ping 模块在 perl 中的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15360233/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com