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.
The function for retrieving ASN information for multiple IP addresses from Cymru via port 43/tcp (WHOIS).
ipwhois.experimental.get_bulk_asn_whois()
Arguments supported:
Key | Type | Description |
addresses | list | List of IP address strings to lookup. |
retry_count | int | The number of times to retry in case socket errors, timeouts, connection resets, etc. are encountered. Defaults to 3. |
timeout | int | The default timeout for socket connections in seconds. Defaults to 120. |
Outputs a string of the raw ASN bulk data, new line separated. The first line is obsolete.
>>>> from ipwhois.experimental import get_bulk_asn_whois >>>> from pprint import pprint >>>> ip_list = ['74.125.225.229', '2001:4860:4860::8888', '62.239.237.1', '2a00:2381:ffff::1', '210.107.73.73', '2001:240:10c:1::ca20:9d1d', '200.57.141.161', '2801:10:c000::', '196.11.240.215', '2001:43f8:7b0::', '133.1.2.5', '115.1.2.3'] >>>> results = get_bulk_asn_whois(addresses=ip_list) >>>> pprint(results.split('\n')) [ "Bulk mode; whois.cymru.com [2024-10-15 05:46:42 +0000]", "15169 | 74.125.225.229 | 74.125.225.0/24 | US | arin | 2007-03-13 | GOOGLE, US", "15169 | 2001:4860:4860::8888 | 2001:4860::/32 | US | arin | 2005-03-14 | GOOGLE, US", "2856 | 62.239.237.1 | 62.239.0.0/16 | GB | ripencc | 2001-01-02 | BT-UK-AS BTnet UK Regional network, GB", "2856 | 2a00:2381:ffff::1 | 2a00:2380::/25 | GB | ripencc | 2007-08-29 | BT-UK-AS BTnet UK Regional network, GB", "3786 | 210.107.73.73 | 210.107.0.0/17 | KR | apnic | 1997-08-29 | LGDACOM LG DACOM Corporation, KR", "2497 | 2001:240:10c:1::ca20:9d1d | 2001:240::/32 | JP | apnic | 2000-03-08 | IIJ Internet Initiative Japan Inc., JP", "19373 | 200.57.141.161 | 200.57.128.0/20 | MX | lacnic | 2000-12-04 | Triara.com S.A. de C.V., MX", "264653 | 2801:10:c000:: | 2801:10:c000::/48 | CO | lacnic | 2013-10-29 | Universidad Catolica de Oriente, CO", "12091 | 196.11.240.215 | 196.11.240.0/24 | ZA | afrinic | 1994-07-21 | MTNNS-1, ZA", "37578 | 2001:43f8:7b0:: | 2001:43f8:7b0::/48 | KE | afrinic | 2013-03-22 | Tespok, KE", "4730 | 133.1.2.5 | 133.1.0.0/16 | JP | apnic | 1997-03-01 | ODINS Osaka University, JP", "4766 | 115.1.2.3 | 115.0.0.0/12 | KR | apnic | 2008-07-01 | KIXS-AS-KR Korea Telecom, KR", "" ]
The function for bulk retrieving and parsing whois information for a list of IP addresses via HTTP (RDAP). This bulk lookup method uses bulk ASN Whois lookups first to retrieve the ASN for each IP. It then optimizes RDAP queries to achieve the fastest overall time, accounting for rate-limiting RIRs.
ipwhois.experimental.bulk_lookup_rdap()
Arguments supported:
Key | Type | Description |
addresses | list | List of IP address strings to lookup. |
inc_raw | bool | Whether to include the raw whois results in the returned dictionary. Defaults to False. |
retry_count | int | The number of times to retry in case socket errors, timeouts, connection resets, etc. are encountered. Defaults to 3. |
depth | int | How many levels deep to run queries when additional referenced objects are found. Defaults to 0. |
excluded_entities | list | Entity handles to not perform lookups. Defaults to None. |
rate_limit_timeout | int | The number of seconds to wait before retrying when a rate limit notice isreturned via rdap+json. Defaults to 60. |
socket_timeout | int | The default timeout for socket connections in seconds. Defaults to 10. |
asn_timeout | int | The default timeout for bulk ASN lookups in seconds. Defaults to 240. |
proxy_openers | list | List of urllib.request.OpenerDirector proxy openers for single/rotating proxy support. Defaults to None. |
The output namedtuple from ipwhois.experimental.bulk_lookup_rdap().
Key | Type | Description |
results | dict | IP address keys with the values as dictionaries returned by IPWhois.lookup_rdap() |
stats | dict | Stats for the lookup containing the keys identified in :ref:`bulk_lookup_rdap-stats` |
The stats dictionary returned by ipwhois.experimental.bulk_lookup_rdap()
{ 'ip_input_total' (int) - The total number of addresses originally provided for lookup via the addresses argument. 'ip_unique_total' (int) - The total number of unique addresses found in the addresses argument. 'ip_lookup_total' (int) - The total number of addresses that lookups were attempted for, excluding any that failed ASN registry checks. 'ip_failed_total' (int) - The total number of addresses that lookups failed for. Excludes any that failed initially, but succeeded after further retries. 'lacnic' (dict) - { 'failed' (list) - The addresses that failed to lookup. Excludes any that failed initially, but succeeded after further retries. 'rate_limited' (list) - The addresses that encountered rate-limiting. Unless an address is also in 'failed', it eventually succeeded. 'total' (int) - The total number of addresses belonging to this RIR that lookups were attempted for. } 'ripencc' (dict) - Same as 'lacnic' above. 'apnic' (dict) - Same as 'lacnic' above. 'afrinic' (dict) - Same as 'lacnic' above. 'arin' (dict) - Same as 'lacnic' above. 'unallocated_addresses' (list) - The addresses that are unallocated/failed ASN lookups. These can be addresses that are not listed for one of the 5 RIRs (other). No attempt was made to perform an RDAP lookup for these. }
>>>> from ipwhois.experimental import bulk_lookup_rdap >>>> from pprint import pprint >>>> ip_list = ['74.125.225.229', '2001:4860:4860::8888', '62.239.237.1', '2a00:2381:ffff::1', '210.107.73.73', '2001:240:10c:1::ca20:9d1d', '200.57.141.161', '2801:10:c000::', '196.11.240.215', '2001:43f8:7b0::', '133.1.2.5', '115.1.2.3'] >>>> results, stats = bulk_lookup_rdap(addresses=ip_list) >>>> pprint(stats) { "afrinic": { "failed": [], "rate_limited": [], "total": 2 }, "apnic": { "failed": [], "rate_limited": [], "total": 4 }, "arin": { "failed": [], "rate_limited": [], "total": 2 }, "ip_failed_total": 0, "ip_input_total": 12, "ip_lookup_total": 12, "ip_unique_total": 12, "lacnic": { "failed": [], "rate_limited": [], "total": 2 }, "ripencc": { "failed": [], "rate_limited": [], "total": 2 }, "unallocated_addresses": [] }