IPFire Location

libloc is versatile, fast and easy to use in any application.

Command Line

libloc comes with a command line tool which makes it easy to test the library or integrate it into your shell scripts. location(8) knows a couple of commands to retrieve country or Autonomous System of an IP address and can generate lists of networks to be imported into other software.

Although this is not the fastest way to lookup a large number of IP addresses, location(8) is versatile and very easy to use.

Man Page
CLI
Search for an Autonomous System by Name
$ location search-as "Lightning Wire Labs"
AS204867 (Lightning Wire Labs GmbH)
Lookup an IP Address
$ location lookup 81.3.27.38
81.3.27.38 belongs to 81.3.27.0/24 which is a part of AS24679 (Hostway Deutschland GmbH)
Python

Python

libloc comes with native Python bindings which are used by its main command-line tool location . They are the most advanced bindings as they support reading from the database as well as writing to it.

Load the database
Python 3.7.3 (default, Apr  3 2019, 05:39:12)
[GCC 8.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import location
>>> d = location.Database("/usr/share/location/database.db")
Search for an Autonomous System by Name
>>> for i in d.search_as("Lightning Wire Labs"):
...   print(i)
...
AS204867 (Lightning Wire Labs GmbH)
Lookup an IP Address
>>> n = d.lookup("81.3.27.38")
>>> n
<location.Network 81.3.27.0/24>
>>> n.asn
24679
>>> n.country_code
'DE'