Net::Connection::Sniffer::Util - netaddr utilities


Net-Connection-Sniffer documentation Contained in the Net-Connection-Sniffer distribution.

Index


Code Index:

NAME

Top

Net::Connection::Sniffer::Util -- netaddr utilities

SYNOPSIS

Top

  use Net::Connection::Sniffer::Util;

  my $ip = newcidr24 Net::Connection::Sniffer::Util($netaddr);

  my $ipcopy = $ip->copy;

  if ($someip->within($ip)) {
	do something...

  if ($ip->contains($someip)) {
	do something...

  if ($ip1->equal($ip2)) {
	do something

DESCRIPTION

Top

Net::Connection::Sniffer::Util is a lite weight perl module to do NetAddr::IP like operations on ip addresses in either 32 or 128 bit formats.

* my $ip = newcidr24;

Create a blessed address object with cidr/24 network/broadcast bounds (assumes 32 bit addressing), for ipv6, this will be cidr/120

* my $ipcopy = $ip->copy;

Copy a blessed network address object to a new blessed object;

Returns 'undef' if $ip is not a Net::Connection::Sniffer::Util object.

* $rv = $someip->within($ip);

Check to see if $someip is within the cidr of $ip. i.e.

  network address <= $someip <= broadcast address

  input:	ip object for range check
  returns:	true if within, else false

Returns 'undef' if $someip and $ip are not Net::Connection::Sniffer::Util objects.

* $rv = $ip->contains($someip);

Check to see if $ip is within the cidr range of $someip. i.e.

This is the logical compliment of the within method.

* $rv = $ip1->equal($ip2);

Check if IP1 equal IP2

  input:	ip2 object
  returns:	true/false

COPYRIGHT

Top

AUTHOR

Top

Michael Robinton <michael@bizsystems.com>

SEE ALSO

Top

	man (3) NetAddr::IP::Util


Net-Connection-Sniffer documentation Contained in the Net-Connection-Sniffer distribution.
#!/usr/bin/perl
package Net::Connection::Sniffer::Util;

use strict;

use NetAddr::IP::Util qw(
	sub128
	hasbits
	ipanyto6
	ipv6_aton
);
use vars qw($VERSION);

$VERSION = do { my @r = (q$Revision: 0.02 $ =~ /\d+/g); sprintf "%d."."%02d" x $#r, @r };

my $oxFF	= ipv6_aton('::FF');
my $oxFF00	= ~ $oxFF;

sub newcidr24 {
  my($proto,$naddr) = @_;
  my $class = ref($proto) || $proto;
  my $self  = {};
  $self->{IP} = $naddr = ipanyto6($naddr);
  $self->{BC} = $naddr | $oxFF;
  $self->{NT} = $naddr & $oxFF00;
  bless ($self, $class);
  return $self;
}

sub copy {
  my $proto = shift;
  return undef unless (my $class = ref($proto)) eq __PACKAGE__;
  my $self = {};
  @{$self}{qw(IP BC NT)} = @{$proto}{qw(IP BC NT)};
  bless ($self,$class);
  return $self;
}

sub within {
  my($sref,$ip) = @_;
  return undef unless 	ref($sref) eq __PACKAGE__ &&
			ref($ip) eq __PACKAGE__;
  return (sub128($sref->{IP},$ip->{NT}) && sub128($ip->{BC},$sref->{IP}))
	? 1 : 0;
}

sub contains {
  my($sref,$ip) = @_;
  return within($ip,$sref);
}

sub equal {
  my($ip1,$ip2) = @_;
  return 0 unless $ip1 && $ip2 && ref $ip1 && ref $ip2;
  return hasbits((sub128($ip1->{IP},$ip2->{IP}))[1])
	? 0 : 1;
}

1;