2013-05-28 1 views
1

사용자가 입력 한 IP의 서브넷을 찾아야합니다. 나는 "ypcat -k netmasks.byaddr"유닉스 명령을 perl에서 실행하여 넷 마스크를 찾는다. 그것은 커맨드 라인 실행에서 잘 작동합니다. 하지만 웹 서버에서 실행되는 동안 작동하지 않습니다.perl cgi를 사용하여 주어진 IP의 서브넷을 찾는 방법은 무엇입니까?

아래 코드가 있습니다.

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 스크립트를 사용하여 입력 한 사용자의 서브넷을 찾는 다른 방법이 있습니까?

감사합니다, 마단

+0

? 당신이 문제가있는 코드를 보여 주면 도움이 될 것입니다 ... – pavel

+0

안녕하세요, pavel, 질문을 수정했습니다. – Madhan

+0

어떤 오류가 발생합니까? (웹 서버 로그를 확인하십시오). 한 가지 잘못된 점은 출력 전에 HTTP 헤더를 인쇄하지 않는다는 것입니다. – pavel

답변

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" ; 
관련 문제