我需要找到用户输入的任何IP的子网。我正在perl中执行“ypcat -k netmasks.byaddr
”unix命令来查找网络掩码。它在命令行执行中运行良好。但是在webserver中执行时它不起作用。
以下是代码。
use strict;
use CGI;
my $page=new CGI;
print $page->header;
my $ipaddress=$page->param("ip");
my @splitted=split(/\./,$ipaddress);
my $part1=$splitted[0].".".$splitted[1].".".$splitted[2];
my $part2=$splitted[3];
my $comma1="ypcat -k netmasks.byaddr|grep -w $part1|awk '{print \$1}'|awk -F. '{print \$4}'|sort -g";
my $comm2="ypcat -k netmasks.byaddr|grep -w $part1|sort";
my @out=`$comm1`;
my @out2=`$comm2`;
my $match;my $sub;my $found;
foreach my $i(@out){
chomp($i);
if($part2 > $i){
$sub=$i;
$found=$part1.".".$sub;
}
}
my (@matched) = grep $_=~m/$found/, @out2;
chomp(@matched);
print "@matched\n";
以上是我用来查找给定IP子网的代码。因为“$ comm1”和“$ comm2”的执行失败了。 有没有其他方法可以找到用户使用Perl脚本输入IP的子网?
谢谢, 马德汉
答案 0 :(得分:0)
您可以使用NetAddr::IP模块执行此作业,如下所示:
#!/usr/local/bin/perl
use strict;
use warnings;
use CGI;
use NetAddr::IP;
my $page = new CGI;
print $page->header;
my $ipaddress = $page->param("ip");
my $ip = NetAddr::IP->new($ipaddress);
print "The address is ", $ip->addr, " with mask ", $ip->mask, "\n" ;