/usr/share/perl5/Net/IP/Minimal.pm is in libnet-ip-minimal-perl 0.06-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 | package Net::IP::Minimal;
{
$Net::IP::Minimal::VERSION = '0.06';
}
#ABSTRACT: Minimal functions from Net::IP
use strict;
use warnings;
require Exporter;
our @ISA = qw(Exporter);
our @EXPORT_OK = qw(ip_get_version ip_is_ipv4 ip_is_ipv6);
our %EXPORT_TAGS = ( 'PROC' => [ @EXPORT_OK ] );
sub ip_get_version {
my $ip = shift;
# If the address does not contain any ':', maybe it's IPv4
$ip !~ /:/ and ip_is_ipv4($ip) and return '4';
# Is it IPv6 ?
ip_is_ipv6($ip) and return '6';
return;
}
sub ip_is_ipv4 {
my $ip = shift;
# Check for invalid chars
unless ($ip =~ m/^[\d\.]+$/) {
return 0;
}
if ($ip =~ m/^\./) {
return 0;
}
if ($ip =~ m/\.$/) {
return 0;
}
# Single Numbers are considered to be IPv4
if ($ip =~ m/^(\d+)$/ and $1 < 256) { return 1 }
# Count quads
my $n = ($ip =~ tr/\./\./);
# IPv4 must have from 1 to 4 quads
unless ($n >= 0 and $n < 4) {
return 0;
}
# Check for empty quads
if ($ip =~ m/\.\./) {
return 0;
}
foreach (split /\./, $ip) {
# Check for invalid quads
unless ($_ >= 0 and $_ < 256) {
return 0;
}
}
return 1;
}
sub ip_is_ipv6 {
my $ip = shift;
# Count octets
my $n = ($ip =~ tr/:/:/);
return 0 unless ($n > 0 and $n < 8);
# $k is a counter
my $k;
foreach (split /:/, $ip) {
$k++;
# Empty octet ?
next if ($_ eq '');
# Normal v6 octet ?
next if (/^[a-f\d]{1,4}$/i);
# Last octet - is it IPv4 ?
if ( ($k == $n + 1) && ip_is_ipv4($_) ) {
$n++; # ipv4 is two octets
next;
}
return 0;
}
# Does the IP address start with : ?
if ($ip =~ m/^:[^:]/) {
return 0;
}
# Does the IP address finish with : ?
if ($ip =~ m/[^:]:$/) {
return 0;
}
# Does the IP address have more than one '::' pattern ?
if ($ip =~ s/:(?=:)/:/g > 1) {
return 0;
}
# number of octets
if ($n != 7 && $ip !~ /::/) {
return 0;
}
# valid IPv6 address
return 1;
}
qq[IP freely];
__END__
=pod
=head1 NAME
Net::IP::Minimal - Minimal functions from Net::IP
=head1 VERSION
version 0.06
=head1 SYNOPSIS
use Net::IP::Minimal qw[:PROC];
my $ip = '172.16.0.216';
ip_is_ipv4( $ip ) and print "$ip is IPv4";
$ip = 'dead:beef:89ab:cdef:0123:4567:89ab:cdef';
ip_is_ipv6( $ip ) and print "$ip is IPv6";
print ip_get_version( $ip );
=head1 DESCRIPTION
L<Net::IP> is very feature complete, but I found I was only using three of its functions
and it uses quite a bit of memory L<https://rt.cpan.org/Public/Bug/Display.html?id=24525>.
This module only provides the minimal number of functions that I use in my modules.
=head1 FUNCTIONS
The same as L<Net::IP> these functions are not exported by default. You may import them explicitly
or use C<:PROC> to import them all.
=over
=item C<ip_get_version>
Try to guess the IP version of an IP address.
Params : IP address
Returns : 4, 6, undef(unable to determine)
C<$version = ip_get_version ($ip)>
=item C<ip_is_ipv4>
Check if an IP address is of type 4.
Params : IP address
Returns : 1 (yes) or 0 (no)
C<ip_is_ipv4($ip) and print "$ip is IPv4";>
=item C<ip_is_ipv6>
Check if an IP address is of type 6.
Params : IP address
Returns : 1 (yes) or 0 (no)
C<ip_is_ipv6($ip) and print "$ip is IPv6";>
=back
=head1 SEE ALSO
L<Net::IP>
=head1 AUTHOR
Chris Williams <chris@bingosnet.co.uk>
=head1 COPYRIGHT AND LICENSE
This software is copyright (c) 2012 by Chris Williams and RIPE-NCC.
This is free software; you can redistribute it and/or modify it under
the same terms as the Perl 5 programming language system itself.
=cut
|