[wiaflos-devel] awit-perl-toolkit external COMMIT - r10 - trunk/awitpt
svn at linuxrulz.org
svn at linuxrulz.org
Tue Dec 8 06:48:47 GMT 2009
Author: nkukard
Date: 2009-12-08 06:48:47 +0000 (Tue, 08 Dec 2009)
New Revision: 10
Modified:
trunk/awitpt/netip.pm
Log:
* Added function to test IPv4/6 validity
- Robert Anderson <randerson at lbsd.net>
Modified: trunk/awitpt/netip.pm
===================================================================
--- trunk/awitpt/netip.pm 2009-12-07 13:23:30 UTC (rev 9)
+++ trunk/awitpt/netip.pm 2009-12-08 06:48:47 UTC (rev 10)
@@ -86,6 +86,88 @@
}
+# Check for a valid ipv6/ipv4 address
+sub is_valid
+{
+ my $ip = shift;
+
+
+ # Check if defined
+ if (!defined($ip)) {
+ return 0;
+ }
+
+ # Check for valid IPv4 address
+ if ($ip =~ /^(\d{1,3})(?:\.(\d{1,3})(?:\.(\d{1,3})(?:\.(\d{1,3}))?)?)?(?:\/(\d{1,2}))?$/) {
+
+ # Check octets are within limits
+ foreach ($1,$2,$3,$4) {
+ if (defined($_)) {
+ if ($_ > 255 || $_ < 0) {
+ return 0;
+ }
+ }
+ }
+
+ # Check bitmask is within limits
+ if (defined($5)) {
+ if ($5 > 32 || $5 < 1) {
+ return 0;
+ }
+ }
+
+ # Check for valid IPv6 address
+ } elsif ($ip =~ /:/) {
+
+ # Pull off and check bitmask
+ if ($ip =~ s/\/(\d{1,3})$//g) {
+ if ($1 > 128 || $1 < 1) {
+ return 0;
+ }
+ }
+
+ # Check for illegal characters
+ if (!($ip =~ /^[a-f\d:]+$/i)) {
+ return 0;
+ }
+
+ # Does the IP address have more than one '::' pattern ?
+ my $count;
+ while ($ip =~ /::/g) {
+ $count++;
+ }
+ if ($count > 1) {
+ return 0;
+ }
+
+ # Count octets
+ my $n = ($ip =~ tr/:/:/);
+ if (!($n > 0 and $n < 8)) {
+ return 0;
+ }
+
+ # Check octets
+ foreach (split /:/, $ip) {
+
+ # Empty octet ?
+ next if ($_ eq '');
+
+ # Normal v6 octet ?
+ next if (/^[a-f\d]{1,4}$/i);
+
+ return 0;
+ }
+
+ # Do not recognise
+ } else {
+ return 0;
+ }
+
+
+ return 1;
+}
+
+
# Clone an object
sub copy
{
More information about the wiaflos-devel
mailing list