1

ユーザーが入力した IP のサブネットを見つける必要があります。ypcat -k netmasks.byaddrnetmask を見つけるために perl で 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 のサブネットを見つける他の方法はありますか?

ありがとう、マダン

4

1 に答える 1

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" ;
于 2013-05-28T11:42:08.940 に答える