【问题标题】:Differences between system function "ping" and Net::Ping module in perl?perl中系统函数“ping”和Net::Ping模块的区别?
【发布时间】:2013-02-27 21:46:36
【问题描述】:

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

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

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

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

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

#!/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 返回失败。这两种方法有什么区别吗?

谢谢, 马丹

【问题讨论】:

  • 你使用的是什么操作系统?
  • 代码将在Unix服务器上执行。

标签: perl


【解决方案1】:

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

由于您使用的是默认值,我想说这些是主要区别。此外,ICMP 没有“端口”,而 TCP 显然

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

但是,如果你只是想要你的系统ping 所拥有的,文档指出你可以使用关键字'external' 作为“协议”来调用系统ping 命令。

【讨论】:

  • 在我的网络中有windows和Unix系统。我需要将一些动态 IP 更改为手动。为此,我需要在网络中找到可 ping 的 IP。在这种情况下,只有我面临我的问题中提到的问题。使用 Net::Ping 时,它无法 ping 网络中的 Windows IP ......为什么?
  • @Madhan,看我的最后一段。
猜你喜欢
  • 2011-12-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-29
相关资源
最近更新 更多