如何在Python 3中通过IP获取WhoIs信息?

巴肯·瓦尔丹扬

注意:这不是图书馆推荐问题。而是关于解决问题的可能方法。

问题:在Python 3中,有什么方法可以从给定的IP地址检索WhoIs信息?结果应至少包含:

  • 注册国家
  • ISP名称,地址,滥用电子邮件
  • 如果注册,域名
  • 注册和有效期
  • 如果结果不是纯文本并且上面的信息是结构化的,则加分

我不在外壳“ whois”命令周围寻找包装器,因为该程序必须在Windows下运行。

在问这个问题之前,谷歌给了我以下图书馆:

通过pip或在导入期间进行安装时,以下引发错误

  • BulkWhois
  • WhoisClient
  • cymruwhois
  • dwhois
  • ipwhois
  • pyiptools
  • python-whois
  • pywhois
  • uwhoisd
  • whois
  • whoislookup
  • whoispy

以下库确实可以在Python 3中工作,但是它们却与我想要的相反—它们是通过域名而不是IP地址来查找的:

  • nicnames
  • pythonwhois

在询问之前,我已经研究了以下问题:

帕德拉克·坎宁安

这里安装稳定版本的dnspython

然后pip3 install ipwhois

In [37]: from ipwhois import IPWhois

In [38]: obj = IPWhois('74.125.225.229')

In [39]: res=obj.lookup()

In [40]: res["nets"][0]['country']
Out[40]: 'US'

In [41]: res["nets"][0]['abuse_emails']
Out[41]: '[email protected]'

In [42]: from pprint import pprint

In [43]: pprint(res)
{'asn': '15169',
 'asn_cidr': '74.125.225.0/24',
 'asn_country_code': 'US',
 'asn_date': '2007-03-13',
 'asn_registry': 'arin',
 'nets': [{'abuse_emails': '[email protected]',
           'address': '1600 Amphitheatre Parkway',
           'cidr': '74.125.0.0/16',
           'city': 'Mountain View',
           'country': 'US',
           'created': '2007-03-13T00:00:00',
           'description': 'Google Inc.',
           'misc_emails': None,
           'name': 'GOOGLE',
           'postal_code': '94043',
           'state': 'CA',
           'tech_emails': '[email protected]',
           'updated': '2012-02-24T00:00:00'}],
 'query': '74.125.225.229',
 'raw': None}

HTTP:

In [44]: res=obj.lookup_rws()

In [45]: pprint(res)
{'asn': '15169',
 'asn_cidr': '74.125.225.0/24',
 'asn_country_code': 'US',
 'asn_date': '2007-03-13',
 'asn_registry': 'arin',
 'nets': [{'abuse_emails': '[email protected]',
           'address': '1600 Amphitheatre Parkway',
           'cidr': '74.125.0.0/16',
           'city': 'Mountain View',
           'country': 'US',
           'created': '2007-03-13T12:09:54-04:00',
           'description': 'Google Inc.',
           'misc_emails': None,
           'name': 'GOOGLE',
           'postal_code': '94043',
           'state': 'CA',
           'tech_emails': '[email protected]',
           'updated': '2012-02-24T09:44:34-05:00'}],
 'query': '74.125.225.229',
 'raw': None}

该API已更改,因为旧版ipwhois IPWhois.lookup()从v0.12.0开始不推荐使用,并将被删除。旧版Whois查询已移至IPWhois.lookup_whois()。

您可以访问该方法,我禁用了警告以便能够看到输出,在实际用例中应考虑不建议使用的警告:

In [30]: from warnings import filterwarnings

In [31]: filterwarnings( action="ignore")

In [32]: from ipwhois import IPWhois

In [33]: obj = IPWhois('74.125.225.229')

In [34]: obj.lookup_whois()
Out[34]: 
{'asn': '15169',
 'asn_cidr': '74.125.225.0/24',
 'asn_country_code': 'US',
 'asn_date': '2007-03-13',
 'asn_description': 'GOOGLE - Google Inc., US',
 'asn_registry': 'arin',
 'nets': [{'address': '1600 Amphitheatre Parkway',
   'cidr': '74.125.0.0/16',
   'city': 'Mountain View',
   'country': 'US',
   'created': '2007-03-13',
   'description': 'Google Inc.',
   'emails': ['[email protected]', '[email protected]'],
   'handle': 'NET-74-125-0-0-1',
   'name': 'GOOGLE',
   'postal_code': '94043',
   'range': '74.125.0.0 - 74.125.255.255',
   'state': 'CA',
   'updated': '2012-02-24'}],
 'nir': None,
 'query': '74.125.225.229',
 'raw': None,
 'raw_referral': None,
 'referral': None}

docs状态IPWhois.lookup_rdap()现在是推荐的查找方法。与传统的whois和REST查找(先前的实现)相比,RDAP提供了更好的数据结构。RDAP查询允许解析用户,组织和组的联系信息和详细信息。RDAP还提供了更详细的网络信息。

但是,按照使用示例逐字记录或添加asn_methods=["whois"])剧照会发出弃用警告,因此,在实际用例中,这也是需要解决的问题。

In [31]: from ipwhois import IPWhois

In [32]: obj = IPWhois('74.125.225.229')
/usr/local/lib/python3.6/site-packages/ipwhois/net.py:138: UserWarning: allow_permutations has been deprecated and will be removed. It is no longer needed, due to the deprecation of asn_alts, and the addition of the asn_methods argument.
  warn('allow_permutations has been deprecated and will be removed. '

In [33]:  obj.lookup_rdap(asn_methods=["whois"])
/usr/local/lib/python3.6/site-packages/ipwhois/asn.py:302: UserWarning: IPASN._parse_fields_whois() has been deprecated and will be removed. You should now use IPASN.parse_fields_whois().
  warn('IPASN._parse_fields_whois() has been deprecated and will be '
Out[33]: 
{'asn': '15169',
 'asn_cidr': '74.125.225.0/24',
 'asn_country_code': 'US',
 'asn_date': '2007-03-13',
 'asn_description': 'GOOGLE - Google Inc., US',
 'asn_registry': 'arin',
 'entities': ['GOGL'],
 'network': {'cidr': '74.125.0.0/16',
  'country': None,
  'end_address': '74.125.255.255',
  'events': [{'action': 'last changed',
    'actor': None,
    'timestamp': '2012-02-24T09:44:34-05:00'},
   {'action': 'registration',
    'actor': None,
    'timestamp': '2007-03-13T12:09:54-04:00'}],
  'handle': 'NET-74-125-0-0-1',
  'ip_version': 'v4',
  'links': ['https://rdap.arin.net/registry/ip/074.125.000.000',
   'https://whois.arin.net/rest/net/NET-74-125-0-0-1'],
  'name': 'GOOGLE',
  'notices': [{'description': 'By using the ARIN RDAP/Whois service, you are agreeing to the RDAP/Whois Terms of Use',
    'links': ['https://www.arin.net/whois_tou.html'],
    'title': 'Terms of Service'}],
  'parent_handle': 'NET-74-0-0-0-0',
  'raw': None,
  'remarks': None,
  'start_address': '74.125.0.0',
  'status': None,
  'type': None},
 'nir': None,
 'objects': {'GOGL': {'contact': {'address': [{'type': None,
      'value': '1600 Amphitheatre Parkway\nMountain View\nCA\n94043\nUNITED STATES'}],
    'email': None,
    'kind': 'org',
    'name': 'Google Inc.',
    'phone': None,
    'role': None,
    'title': None},
   'entities': ['ABUSE5250-ARIN', 'ZG39-ARIN'],
   'events': [{'action': 'last changed',
     'actor': None,
     'timestamp': '2017-01-28T08:32:29-05:00'},
    {'action': 'registration',
     'actor': None,
     'timestamp': '2000-03-30T00:00:00-05:00'}],
   'events_actor': None,
   'handle': 'GOGL',
   'links': ['https://rdap.arin.net/registry/entity/GOGL',
    'https://whois.arin.net/rest/org/GOGL'],
   'notices': None,
   'raw': None,
   'remarks': None,
   'roles': ['registrant'],
   'status': None}},
 'query': '74.125.225.229',
 'raw': None}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在gdb中通过库地址获取信息

来自分类Dev

如何在python中获取证书颁发者信息?

来自分类Dev

如何在Windows中安装Whois python模块

来自分类Dev

如何在Python 3中打印出编号的IP地址

来自分类Dev

如何在外壳中获取未格式化的IP地址信息?

来自分类Dev

如何在 IP 地址上运行 whois?

来自分类Dev

如何在Electron中获取系统信息?

来自分类Dev

如何在JSP中获取主体信息?

来自分类Dev

如何在android中获取Facebook信息

来自分类Dev

如何在Infusionsoft中通过订单ID获取订单详细信息

来自分类Dev

如何在Python3中获取“旧” zip()?

来自分类Dev

如何在python 3中获取子数组

来自分类Dev

如何在python 3中获取子数组

来自分类Dev

如何通过Rails中的关联获取详细信息?

来自分类Dev

如何通过原始输入从类中获取信息

来自分类Dev

如何通过NLog在AppInsights中获取范围信息?

来自分类Dev

如何通过Rails中的关联获取详细信息?

来自分类Dev

如何通过Bamboo API获取计划中的测试统计信息

来自分类Dev

如何通过经纬度获取android中的城市信息

来自分类Dev

如何在python中获取昨天

来自分类Dev

如何在Python中获取URL的基础?

来自分类Dev

如何在拆分Python中获取值?

来自分类Dev

如何在pyspark中获取Python库?

来自分类Dev

如何在python中获取垃圾值

来自分类Dev

如何在python中获取定时输入?

来自分类Dev

如何在Python中获取坐标?

来自分类Dev

如何在python中获取嵌套的href?

来自分类Dev

如何在Python中获取类路径

来自分类Dev

如何在python中获取堡垒统计