如何使用perl cgi查找给定IP的子网?

如何使用perl cgi查找给定IP的子网?,perl,unix,cgi,subnet,Perl,Unix,Cgi,Subnet,我需要找到用户输入的任何IP的子网。我正在用perl执行“ypcat-k netmasks.byaddr”unix命令来查找网络掩码。它在命令行执行中运行良好。但它在Web服务器中执行时不起作用 下面是代码 use strict; use CGI; my $page=new CGI; print $page->header; my $ipaddress=$page->param("ip"); my @splitted=split(/\./,$ipaddress); my $pa

我需要找到用户输入的任何IP的子网。我正在用perl执行“
ypcat-k netmasks.byaddr
”unix命令来查找网络掩码。它在命令行执行中运行良好。但它在Web服务器中执行时不起作用

下面是代码

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的子网还有其他方法吗

谢谢, Madhan

您可以使用此模块进行此作业,如下所示:

#!/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" ;

什么“不起作用”?如果你展示了你遇到问题的代码,这会有所帮助…嗨,帕维尔,我已经编辑了这个问题。你会得到什么错误?(检查您的web服务器日志)。错误的一点是,在输出之前没有打印任何HTTP头…嗨,pavel…,服务器日志中没有错误。输出为空。但是,命令行执行正在完美地返回。我忘了在这里提到http头,但我的代码中没有提到。您是否按照pavel的建议打印了头?