#!/usr/bin/perl -w use strict; use Socket; sub MaskbitsToNetmask { my ($bits) = @_; return 0xFFFFFFFF-((1<<(32-$bits))-1); } sub MaskToRange { my ($range) = @_; my ($ip,$mask) = split (/\//, $range); $ip = CompactIP($ip); return ($ip, $ip | (1<<(32-$mask) - 1)); } sub ExpandIP ($) { return inet_ntoa (pack ("N", @_)); } sub CompactIP ($) { return unpack ("N", inet_aton (@_)); } sub IsInRange { my ($ip, $range) = @_; $ip = CompactIP($ip); my ($range_low, $range_hi) = MaskToRange ($range); return (($range_low <= $ip) && ($ip <= $range_hi)); } #### print IsInRange ("192.168.2.42","192.168.0.0/16"),"\n"; # 1 print IsInRange ("192.168.2.42","192.168.0.0/24"),"\n"; # undef print IsInRange ("192.168.2.42","192.168.2.0/24"),"\n"; # 1 print IsInRange ("24.123.234.1","24.0.0.0/8"),"\n"; # 1