use HTTP::Date qw(time2iso str2time time2iso time2isoz);
use Net::Ping;
use Socket;
use encoding 'euc_cn';
my @array=( "api.weixin.qq.cm"
);
while (1==1){
my $CurrTime = time2iso(time());
foreach $host (@array){
$p = Net::Ping->new("icmp" );
$ip_addr=gethostbyname($host);
print "$ip_addr is $ip_addr
";
#eval {$packed_ip_addr= inet_ntoa($ip_addr)};
$packed_ip_addr= inet_ntoa($ip_addr);
print "$packed_ip_addr is $packed_ip_addr
";
if ($p->ping($host,2)) {
open (A, ">>ping.log");
(
print A ("$CurrTime---$packed_ip_addr is active.
")
)} else
{
open (B ,">>ping.log");
(
print B ("$CurrTime---$host is lost.
") ,print "$host is lost.
"
)
}
sleep(5)
}}
}
正常情况:
D:>perl ping.pl
"x{fffd}" does not map to euc-cn at ping.pl line 13.
$ip_addr is gx{fffd}$
$packed_ip_addr is 103.251.36.235
"x{fffd}" does not map to euc-cn at ping.pl line 13.
$ip_addr is gx{fffd}$
$packed_ip_addr is 103.251.36.235
api.weixin.qq.cm is lost.
"x{fffd}" does not map to euc-cn at ping.pl line 13.
$ip_addr is gx{fffd}$
$packed_ip_addr is 103.251.36.235
异常:
use HTTP::Date qw(time2iso str2time time2iso time2isoz);
use Net::Ping;
use Socket;
use encoding 'euc_cn';
my @array=( "api.weixin.qq.cz"
);
while (1==1){
my $CurrTime = time2iso(time());
foreach $host (@array){
$p = Net::Ping->new("icmp" );
$ip_addr=gethostbyname($host);
print "$ip_addr is $ip_addr
";
#eval {$packed_ip_addr= inet_ntoa($ip_addr)};
$packed_ip_addr= inet_ntoa($ip_addr);
print "$packed_ip_addr is $packed_ip_addr
";
if ($p->ping($host,2)) {
open (A, ">>ping.log");
(
print A ("$CurrTime---$packed_ip_addr is active.
")
)} else
{
open (B ,">>ping.log");
(
print B ("$CurrTime---$host is lost.
") ,print "$host is lost.
"
)
}
sleep(5)
}}
D:>perl ping.pl
$ip_addr is
Bad arg length for Socket::inet_ntoa, length is 0, should be 4 at ping.pl line 1
5.
D:>
一个正常(或能正确解析)的 domain, inet_aton() 会回传 4 个字符 chr 0-255
但如果是不能解析的话, 就会回传 0.
Bad arg length for Socket::inet_ntoa, length is 0, should be 4 at ping.pl line 1
回传0了
此处加上eval 就是防止程序崩溃
use HTTP::Date qw(time2iso str2time time2iso time2isoz);
use Net::Ping;
use Socket;
use encoding 'euc_cn';
my @array=( "api.weixin.qq.cz"
);
while (1==1){
my $CurrTime = time2iso(time());
foreach $host (@array){
$p = Net::Ping->new("icmp" );
$ip_addr=gethostbyname($host);
print "$ip_addr is $ip_addr
";
eval {$packed_ip_addr= inet_ntoa($ip_addr)};
# $packed_ip_addr= inet_ntoa($ip_addr);
print "$packed_ip_addr is $packed_ip_addr
";
}
sleep(3);
}
D:>perl ping.pl
$ip_addr is
$packed_ip_addr is
$ip_addr is
$packed_ip_addr is
-------------------------------------------------------------------
use HTTP::Date qw(time2iso str2time time2iso time2isoz);
use Net::Ping;
use Socket;
use encoding 'euc_cn';
my @array=( "api.weixin.qq.cz"
);
while (1==1){
my $CurrTime = time2iso(time());
foreach $host (@array){
$p = Net::Ping->new("icmp" );
$ip_addr=gethostbyname($host);
print "$ip_addr is $ip_addr
";
# eval {$packed_ip_addr= inet_ntoa($ip_addr)};
$packed_ip_addr= inet_ntoa($ip_addr);
print "$packed_ip_addr is $packed_ip_addr
";
}
sleep(3);
}
D:>perl ping.pl
$ip_addr is
Bad arg length for Socket::inet_ntoa, length is 0, should be 4 at ping.pl line 1
5.
没有eval,程序崩溃 print "$packed_ip_addr is $packed_ip_addr
";没有执行