Comment trouver un sous-réseau de l’adresse IP donnée à l’aide de Perl cgi?

Je dois trouver le sous-réseau de toute adresse IP saisie par l’utilisateur. ypcat -k netmasks.byaddr commande unixypcat -k netmasks.byaddr ” dans perl pour trouver les masques de réseau. Il fonctionne bien en exécution de ligne de commande. Mais il ne fonctionne pas lors de l’exécution du serveur Web.

Le ci-dessous est le code.

 use ssortingct; 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"; 

Ce qui précède est le code que j’utilise pour trouver le sous-réseau de l’adresse IP donnée. En ce que l’exécution de “$ comm1” et “$ comm2” échoue. Y a-t-il une autre façon de trouver le sous-réseau de l’IP saisi par l’utilisateur en utilisant le script Perl?

Merci Madhan

Vous pouvez utiliser le module NetAddr :: IP pour ce travail, comme indiqué ci-dessous:

 #!/usr/local/bin/perl use ssortingct; 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" ;