AWS-Networks

 view release on metacpan or  search on metacpan

README  view on Meta::CPAN

NAME
    AWS::Networks - Parse and query official AWS network ranges

SYNOPSIS
      use AWS::Networks;

      my $nets = AWS::Networks->new();

      say $nets->sync_token->iso8601;

      foreach my $cidr (@{ $nets->cidrs }){
        say $cidr
      }

DESCRIPTION
    This module parses the official public IP network information published
    by Amazon Web Services at https://ip-ranges.amazonaws.com/ip-ranges.json

    Please read and understand the information can be found at
    http://docs.aws.amazon.com/general/latest/gr/aws-ip-ranges.html to make
    sense of the data retured by this module.

README  view on Meta::CPAN

    appear

  services
    Returns an ArrayRef of the different services present in the current
    dataset

  regions
    Returns an ArrayRef of the different regions present in the current
    dataset

  cidrs
    Returns an ArrayRef with the CIDR blocks in the dataset

  by_region($region)
    Returns a new AWS::Networks object with the data filtered to only the
    objects in the specified region

  by_service($service)
    Returns a new AWS::Networks object with the data filtered to only the
    services specified

bin/aws_ips_for_service  view on Meta::CPAN

#!/usr/bin/env perl

use AWS::Networks;
use Net::CIDR::Set;

my $service = $ARGV[0] or die "Usage $0 AMAZON|CLOUDFRONT|...|ROUTE53\n";

my $nets = AWS::Networks->new;

my $cidrs = $nets->by_service(uc($service))->cidrs;

my $set = Net::CIDR::Set->new(@$cidrs);

my $count = 0;
my $iter = $set->iterate_cidr;
while ( my $cidr = $iter->() ) {
  my ($net, $bits) = split /\//, $cidr;
  if ($bits == 32) {
    $count += 1;
  } elsif ($bits == 31) {
    $count += 2;
  } else {
    $count += (( 2 ** (32 - $bits) ) - 2);
  }
}

print "AWS has $count IP Addresses\n";

lib/AWS/Networks.pm  view on Meta::CPAN


  sub by_service {
    my ($self, $service) = @_;
    return AWS::Networks->new(
      url => undef,
      sync_token => $self->sync_token,
      networks => [ grep { $_->{ service } eq $service } @{ $self->networks }  ]
    );
  }

  has cidrs => (
    is => 'ro',
    isa => 'ArrayRef',
    default => sub {
      my ($self) = @_;
      return [ map { $_->{ ip_prefix } } @{ $self->networks } ];
    },
    lazy => 1,
  );

1;

lib/AWS/Networks.pm  view on Meta::CPAN

AWS::Networks - Parse and query official AWS network ranges

=head1 SYNOPSIS

  use AWS::Networks;

  my $nets = AWS::Networks->new();

  say $nets->sync_token->iso8601;

  foreach my $cidr (@{ $nets->cidrs }){
    say $cidr
  }

=head1 DESCRIPTION

This module parses the official public IP network information published by Amazon Web Services at https://ip-ranges.amazonaws.com/ip-ranges.json

Please read and understand the information can be found at http://docs.aws.amazon.com/general/latest/gr/aws-ip-ranges.html to make sense of the data retured by this module.

=head1 USAGE

lib/AWS/Networks.pm  view on Meta::CPAN

region can be one of: ap-northeast-1 | ap-southeast-1 | ap-southeast-2 | cn-north-1 | eu-central-1 | eu-west-1 | sa-east-1 | us-east-1 | us-gov-west-1 | us-west-1 | us-west-2 | GLOBAL, but expect new values to appear

=head2 services

Returns an ArrayRef of the different services present in the current dataset

=head2 regions

Returns an ArrayRef of the different regions present in the current dataset

=head2 cidrs

Returns an ArrayRef with the CIDR blocks in the dataset

=head2 by_region($region)

Returns a new AWS::Networks object with the data filtered to only the objects in the
specified region

=head2 by_service($service)



( run in 1.175 second using v1.01-cache-2.11-cpan-4505f990765 )