#! /usr/bin/perl 

use strict;

use CGI;
use CGI::Carp qw/fatalsToBrowser/;
use Template;
use Net::Subnet;

my $cgi = CGI->new();
my $tt = Template->new(
	INCLUDE_PATH => "/home/avi/wordpress_html/ips/templates/",
	INTERPOLATE => 1,
);

print "Content-type: text/html\n\n";

if(!$cgi->param('address')){
	$tt->process('main');
	exit;
}
my $is_valid = subnet_matcher qw( 0.0.0.0/0 );

my $is_private = subnet_matcher qw(
  0.0.0.0/8

  10.0.0.0/8

  100.64.0.0/10

  127.0.0.0/8

  169.254.0.0/16

  172.16.0.0/12

  192.0.0.0/24
  192.0.2.0/24
  192.88.99.0/24
  192.168.0.0/16
  192.18.0.0/16

  198.18.0.0/15
  198.51.100.0/24

  203.0.113.0/24

  224.0.0.0/4

  233.252.0.0/24

  240.0.0.0/4

  255.255.255.255/32
  
);


my $address = $cgi->param('address');
my $status;

if ($address =~ m/^\d+\.\d+\.\d+\.\d+$/ and $is_valid->($address)){
  $status = $is_private->($address) ? 'private' : 'public';
}else{
  $status = 'invalid';
}
$tt->process('main', {address => $address, status => $status});
