logo
Free, unlimited AI code reviews that run on commit
git-lrc git-lrc GitHub Install Now We'd appreciate a star git-lrc - Free, unlimited AI code reviews that run on commit | Product Hunt git-lrc - Free, unlimited AI code reviews that run on commit | Product Hunt

IP::Geolocation::MMDB - Read MaxMind DB files

Acknowledgements

       Thanks to all who have contributed patches and reported bugs:

       •   Yujuan Jiang

Author

       Andreas Vögele <voegelas@cpan.org>

Bugs And Limitations

       If  your  Perl  interpreter  does  not support 64-bit integers, MMDB_DATA_TYPE_UINT64 values are put into
       Math::BigInt objects.

       MMDB_DATA_TYPE_UINT128 values are put into Math::BigInt objects.

       IP::Geolocation::MMDB can replace MaxMind::DB::Reader in many cases with the following differences:

       •   The classes aren't Moo classes.

       •   There is no replacement for MaxMind::DB::Reader::Decoder.

       Create the file MaxMind/DB/Reader.pm in your @INC path if you want  to  try  IP::Geolocation::MMDB  as  a
       replacement for MaxMind::DB::Reader:

         use IP::Geolocation::MMDB;
         @MaxMind::DB::Reader::ISA = qw(IP::Geolocation::MMDB);
         1;

Configuration And Environment

       None.

Dependencies

       Requires  Math::BigInt  version  1.999806,  which  is  distributed  with  Perl  5.26 and newer.  Requires
       libmaxminddb 1.2.0 or newer.

       Requires a database in the MaxMind DB file format from MaxMind  <https://www.maxmind.com/>  or  DP-IP.com
       <https://db-ip.com/>.

       Alien::libmaxminddb  from  CPAN is a build dependency.  The built module does only depend on modules that
       are distributed with Perl.

       Install "pkg-config" and "libmaxminddb-devel" or  "libmaxminddb-dev"  if  you  would  like  to  use  your
       operating system's libmaxminddb library.

Description

       A Perl module that reads MaxMind DB files and maps IP addresses to location information such as country
       and city names.

Diagnostics

The"file"parameterismandatory
           The constructor was called without a database filename.

       Erroropeningdatabasefile
           The database file could not be read.

       TheIPaddressyouprovidedisnotavalidIPv4orIPv6address
           A parameter did not contain a valid IP address.

       ErrorlookingupIPaddress
           A database error occurred while looking up an IP address.

       Entrydataerrorlookingup
           A database error occurred while reading the data associated with an IP address.

       Errorgettingmetadata
           An error occurred while reading the database's metadata.

       Invalidrecordwhenreadingnode
           Either an invalid node was looked up or the database is corrupt.

       Unknownrecordtype
           An unknown record type was found in the database.

       Invaliddepthwhenreadingnode
           An error occurred while traversing the search tree.

Incompatibilities

       None.

Name

       IP::Geolocation::MMDB - Read MaxMind DB files

See Also

       See Geo::Location::IP for object-oriented wrapper classes.

Subroutines/Methods

new
         my $db = IP::Geolocation::MMDB->new(file => '/path/to/Country.mmdb');

       Returns a new database object.  Dies if the specified file cannot be read.

   get
         my $data = $db->get($ip_address);
         my ($data, $prefix_length) = $db->get($ip_address);

       Takes an IPv4 or IPv6 address as a string and returns the data associated with the IP address or the
       undefined value.  In list context, the data and the network prefix length associated with the IP address
       are returned.  Dies if the address is not a valid IP address.

       The returned data is usually a hash reference but could also be a an array reference or a scalar for
       custom databases.  Here's an example from an IP to city database:

         {
           city => {
             geoname_id => 2950159,
             names      => {
               en => "Berlin"
             }
           },
           country => {
             geoname_id => 2921044,
             iso_code   => "DE",
             names      => {
               en => "Germany",
               fr => "Allemagne"
             }
           },
           location => {
             latitude  => 52.524,
             longitude => 13.411
           }
         }

   getcc
         my $country_code = $db->getcc($ip_address);

       Takes an IPv4 or IPv6 address as a string and returns a two-letter country code or the undefined value.
       Dies if the address is not a valid IP address.

   record_for_address
         my $data = $db->record_for_address($ip_address);

       An alias for "get" that always returns a scalar.

   iterate_search_tree
         sub data_callback {
           my ($numeric_ip, $prefix_length, $data) = @_;
         }

         sub node_callback {
           my ($node_number, $left_node_number, $right_node_number) = @_;
         }

         $db->iterate_search_tree(\&data_callback, \&node_callback);

       Iterates over the entire search tree.  Calls the provided callbacks for each data record and node in the
       tree.  Both callbacks are optional.

       The data callback is called with a numeric IP address as a Math::BigInt object, a network prefix length
       and the data associated with the network.

       The node callback is called with the node's number in the tree and the children's node numbers.

   metadata
         my $metadata = $db->metadata;

       Returns an IP::Geolocation::MMDB::Metadata object for the database.

   file
         my $file = $db->file;

       Returns the file path passed to the constructor.

   libmaxminddb_version
         my $version = IP::Geolocation::MMDB::libmaxminddb_version;

       Returns the libmaxminddb version.

Synopsis

         use IP::Geolocation::MMDB;
         my $db = IP::Geolocation::MMDB->new(file => '/path/to/Country.mmdb');
         my $metadata = $db->metadata;
         my $data = $db->get('1.2.3.4');
         my $country_code = $db->getcc('2620:fe::9');

Version

       version 1.013

See Also