Retrieve and parse whois data for IPv4 and IPv6 addresses
.. image:: https://travis-ci.org/secynic/ipwhois.svg?branch=master :target: https://travis-ci.org/secynic/ipwhois .. image:: https://coveralls.io/repos/github/secynic/ipwhois/badge.svg?branch= master :target: https://coveralls.io/github/secynic/ipwhois?branch=master .. image:: https://img.shields.io/github/issues-raw/secynic/ipwhois :target: https://github.com/secynic/ipwhois/issues .. image:: https://codeclimate.com/github/secynic/ipwhois/badges/issue_count.svg :target: https://codeclimate.com/github/secynic/ipwhois .. image:: https://img.shields.io/badge/license-BSD%202--Clause-blue.svg :target: https://github.com/secynic/ipwhois/tree/master/LICENSE.txt .. image:: https://img.shields.io/badge/python-2.7%2C%203.4+-blue.svg :target: https://docs.python.org .. image:: https://img.shields.io/badge/docs-latest-green.svg?style=flat :target: https://ipwhois.readthedocs.io/en/latest .. image:: https://img.shields.io/badge/docs-dev-yellow.svg?style=flat :target: https://ipwhois.readthedocs.io/en/dev
ipwhois is a Python package focused on retrieving and parsing whois data for IPv4 and IPv6 addresses.
.. note::
If you are experiencing latency issues, it is likely related to rate
limiting. Rate limiting is based on your source IP, which may be a problem
with multiple users behind the same proxy. Additionally, LACNIC implements
aggressive rate limiting. Experimental bulk query support is new as of
v1.0.0.
GitHub latest ^^^^^^^^^^^^^
https://ipwhois.readthedocs.io/en/latest
GitHub dev ^^^^^^^^^^
https://ipwhois.readthedocs.io/en/dev
https://github.com/secynic/ipwhois/tree/master/ipwhois/examples
https://github.com/secynic/ipwhois
https://pypi.org/project/ipwhois
https://ipwhois.readthedocs.io/en/latest/CHANGES.html
https://ipwhois.readthedocs.io/en/latest/UPGRADING.html
Python 2.7::
dnspython
ipaddr
Python 3.4+::
dnspython
Latest release from PyPi::
pip install --upgrade ipwhois
GitHub - Stable::
pip install -e git+https://github.com/secynic/ipwhois@master#egg=ipwhois
GitHub - Dev::
pip install -e git+https://github.com/secynic/ipwhois@dev#egg=ipwhois
ipwhois needs some outbound firewall ports opened from your host/server.
:ASN (DNS): 53/tcp :ASN (Whois): 43/tcp :ASN (HTTP): 80/tcp
443/tcp (Pending)
:RDAP (HTTP): 80/tcp
443/tcp (Pending)
:NIR (HTTP): 80/tcp
443/tcp (KRNIC)
:Legacy Whois: 43/tcp :Get Host: 43/tcp
ipwhois.IPWhois is the base class for wrapping RDAP and Legacy Whois lookups. Instantiate this object, then call one of the lookup functions:
RDAP (HTTP) - IPWhois.lookup_rdap() <#rdap-http>
_
OR
Legacy Whois - IPWhois.lookup_whois() <#legacy-whois>
_
Input ^^^^^
+--------------------+--------+-----------------------------------------------+ | Key |Type| Description | +--------------------+--------+-----------------------------------------------+ | address | str | An IPv4 or IPv6 address as a string, integer, | | | | IPv4Address, or IPv6Address. | +--------------------+--------+-----------------------------------------------+ | timeout | int | The default timeout for socket connections | | | | in seconds. Defaults to 5. | +--------------------+--------+-----------------------------------------------+ | proxy_opener | object | The urllib.request.OpenerDirector request for | | | | proxy support or None. | +--------------------+--------+-----------------------------------------------+
IPWhois.lookup_rdap() is the recommended lookup method. RDAP provides a far better data structure than legacy whois and REST lookups (previous implementation). RDAP queries allow for parsing of contact information and details for users, organizations, and groups. RDAP also provides more detailed network information.
RDAP documentation:
https://ipwhois.readthedocs.io/en/latest/RDAP.html
.. note::
Legacy Whois output is different from RDAP. See the below JSON outputs for
a comparison:
Legacy Whois:
https://ipwhois.readthedocs.io/en/latest/WHOIS.html#basic-usage
RDAP:
https://ipwhois.readthedocs.io/en/latest/RDAP.html#basic-usage
Legacy Whois documentation:
https://ipwhois.readthedocs.io/en/latest/WHOIS.html
This library now supports NIR lookups for JPNIC and KRNIC. Previously, Whois and RDAP data for Japan and South Korea was restricted. NIR lookups scrape these national registries directly for the data restricted from regional internet registries. NIR queries are enabled by default via the inc_nir argument in the IPWhois.lookup_*() functions.
https://ipwhois.readthedocs.io/en/latest/NIR.html
This library now supports ASN origin lookups via Whois and HTTP.
IP ASN functionality was moved to its own parser API (IPASN).
There is no CLI for these yet.
https://ipwhois.readthedocs.io/en/latest/ASN.html
Utilities documentation:
https://ipwhois.readthedocs.io/en/latest/UTILS.html
CLI documentation:
https://ipwhois.readthedocs.io/en/latest/CLI.html
.. caution::
Functions in experimental.py contain new functionality that has not yet
been widely tested. Bulk lookup support contained here can result in
significant system/network resource utilization. Additionally, abuse of
this functionality may get you banned by the various services queried by
this library. Use at your own discretion.
Experimental functions documentation:
https://ipwhois.readthedocs.io/en/latest/EXPERIMENTAL.html
https://ipwhois.readthedocs.io/en/latest/CONTRIBUTING.html
This feature is under consideration. Take a look at TekDefense's Automater:
TekDefense-Automater <https://github.com/1aN0rmus/TekDefense-Automater>
_
There are no plans for domain whois support in this project.
Look at Sven Slootweg's
python-whois <https://github.com/joepie91/python-whois>
_ for a library with
domain support.
Thank you JetBrains for the PyCharm <https://www.jetbrains.com/pycharm/>
_
open source support!
Thank you Chris Wells (@cdubz <https://github.com/cdubz>
_) for your
extensive testing on the experimental functions!
Last but not least, thank you to all the issue submitters and contributors.