2013-03-12 57 views
2

據我所知有兩種方式找到可偵測IP通過perl,它是perl中系統函數「ping」和Net :: Ping模塊之間的區別?

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

我試圖通過上述兩種技術來調用IP的ping的狀態。

我在這些方法中遇到問題,即系統ping命令對一個IP返回true。但是,Net :: Ping模塊對同一個IP返回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 ::平將返回失敗。這兩種方法有什麼區別?

感謝, 馬德漢

+0

你在使用什麼操作系統? – Borodin 2013-03-12 12:08:05

+0

該代碼將在Unix服務器中執行。 – Madhan 2013-03-12 12:28:52

回答

5

一個區別是,ping使用ICMP數據包的最低層次的實現,而Net::Ping指出,TCP是默認的。它也默認發送到可能在特定機器上被阻塞的回聲端口(7)。如果要發送ICMP數據包,則必須將ICMP指定爲構造函數中的第一個參數。

由於您使用的是默認值,我會說這些是主要區別。此外,ICMP沒有「端口」,而TCP明顯是確實是

我喜歡使用TCP的Net::Ping的解釋。 Net::Ping - 適用於與之配合的服務器 - 讓您更好地瞭解哪些服務器啓動並具有響應能力,而不僅僅是連接到網絡並可以反彈ICMP數據包。

但是,如果你只是想你有你的系統ping中,DOCO指出,你可以使用關鍵字'external'的「協議」來調用系統命令ping

+0

在我的網絡窗口和Unix系統中都有。我需要將一些動態IP更改爲手動。爲此,我需要在網絡中查找可ping IP。在這種情況下,只有我面臨的問題,如我在quetsion中提到的那樣。使用Net :: Ping時,無法ping通網絡中的Windows IP ...爲什麼? – Madhan 2013-03-12 12:32:31

+0

@Madhan,看我最後一段。 – Axeman 2013-03-12 15:13:28