使用ripestat api收集ip地址详细信息(asn、前缀、资源持有者、反向dns)的python库

ipdetailscache的Python项目详细描述


ipdetailscache

Build StatusPYPI VersionPython Versions

使用ripestat api收集ip地址详细信息(asn、前缀、资源持有者、反向dns)的python库,具有基本缓存以避免大量请求并提高性能。

需求/第三方库

这项工作的一部分是基于google python的ip地址操作库(https://code.google.com/p/ipaddr-py/)和jeff ferland的ipy库(https://github.com/autocracy/python-ipy)。

您需要ipaddrIPy;此库的版本>;=0.2尝试导入ipaddr,然后返回IPy

您可以使用pip

安装它们
  • pip install ipaddr
  • pip install IPy

pip打包版本安装IPy库。

安装

  • 使用pip:

    pip install ipdetailscache
    
  • 手动复制此存储库:

    git clone https://github.com/pierky/ipdetailscache.git
    

测试

在tests目录中提供了一些测试。您可以使用nosetests -vs运行它们。

用法

导入库,然后设置缓存对象并使用它收集IP地址详细信息。 缓存对象将自动加载数据并将数据保存到本地缓存文件。

或者,可以使用以下参数实例化缓存对象:

  • IP_ADDRESSES_CACHE_FILE,存储IP地址缓存的文件的路径(默认值:“ip_addr.cache”);
  • IP_PREFIXES_CACHE_FILE,将存储IP前缀缓存的文件的路径(默认值:“ip_pref.cache”);
  • MAX_CACHE,缓存条目的过期时间,以秒为单位(默认值:604800,1周);
  • dont_save_on_del,避免在__del__上保存缓存(默认值:false,因此它保存缓存);
  • Debug,设置为true以启用某些调试消息(默认值:false)。

IP_ADDRESSES_CACHE_FILEIP_PREFIXES_CACHE_FILE可以设置为None,以避免在文件上持久存储缓存。

互联网交换点(ixps)信息

从0.3.0版开始,可以使用Internet交换点(IXPS)IP地址空间信息丰富结果。 此功能基于peeringdb.com(www.peeringdb.com)API。

要启用ixps信息收集,请调用缓存的UseIXPs方法。

结果显示在包含以下键的字典中:

- ASN           ["<ASN>" | "unknown" | "not announced"]
- Holder        "string"
- Prefix        "string"
- HostName      "string"
- IsIXP         [ None | bool ]
- IXPName       "string"
- TS            int

主机名是使用本地socket.getfqdn函数获得的。

用法示例:

from pierky.ipdetailscache import IPDetailsCache
cache = IPDetailsCache( IP_ADDRESSES_CACHE_FILE = "ip_addr.cache", IP_PREFIXES_CACHE_FILE = "ip_pref.cache", MAX_CACHE = 604800, Debug = False )
cache.UseIXPs( WhenUse=1, IXP_CACHE_FILE="ixps.cache", MAX_CACHE=604800 )
result = cache.GetIPInformation( "IP_ADDRESS" )

UseIXPs方法的WhenUse参数具有以下含义:

  • 0:不使用IXPS信息;
  • 1:仅当无法确定ASN(未知或未公布)时才使用IXPS信息
  • 2:始终使用ixps信息。

示例

:~# python
Python 2.7.2+ (default, Jul 20 2012, 22:15:08)
[GCC 4.6.1] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from pierky.ipdetailscache import IPDetailsCache
>>> cache = IPDetailsCache()
>>> result = cache.GetIPInformation( "193.0.6.139" )
>>> result
{'HostName': 'www.ripe.net', 'TS': 1453068601, 'Prefix': u'193.0.0.0/21', 'IsIXP': None, 'IXPName': '', 'Holder': u'RIPE-NCC-AS Reseaux IP Europeens Network Coordination Centre (RIPE NCC),NL', 'ASN': '3333'}

useixps示例,whenuse=1(默认值)

80.81.203.4=de-cix汉堡IP,未公布

80.249.208.1=AMS-IX IP,已发布

>>> cache.UseIXPs()
>>> decix_ip="80.81.203.4"     # DE-CIX Hamburg IP, not announced
>>> amsix_ip="80.249.208.1"    # AMS-IX IP, announced
>>> result = cache.GetIPInformation(decix_ip)
>>> result
{'HostName': 'ge1-1-12-br2.hamburg10.iphh.net', 'TS': 1453068691, 'Prefix': u'80.81.203.4', 'IsIXP': True, 'IXPName': u'DE-CIX Hamburg', 'Holder': '', 'ASN': 'not announced'}
>>> result = cache.GetIPInformation(amsix_ip)
>>> result
{'HostName': 'rtr-eun-01.ams-ix.net', 'TS': 1453068704, 'Prefix': u'80.249.208.0/21', 'IsIXP': None, 'IXPName': '', 'Holder': u'AMS-IX1 Amsterdam Internet Exchange B.V.,NL', 'ASN': '1200'}

AMS-IX IP已经公布,所以^{TT24}$是^{TT19}$,因为这里没有使用任何IXP信息。

当useixps=2

使用rm *.cache清除本地缓存,然后:

>>> from pierky.ipdetailscache import IPDetailsCache
>>> cache = IPDetailsCache()
>>> cache.UseIXPs(WhenUse=2)
>>> decix_ip="80.81.203.4"     # DE-CIX Hamburg IP, not announced
>>> amsix_ip="80.249.208.1"    # AMS-IX IP, announced
>>> result = cache.GetIPInformation(decix_ip)
>>> result
{'HostName': 'ge1-1-12-br2.hamburg10.iphh.net', 'TS': 1453068812, 'Prefix': u'80.81.203.4', 'IsIXP': True, 'IXPName': u'DE-CIX Hamburg', 'Holder': '', 'ASN': 'not announced'}
>>> result = cache.GetIPInformation(amsix_ip)
>>> result
{'HostName': 'rtr-eun-01.ams-ix.net', 'TS': 1453068956, 'Prefix': u'80.249.208.0/21', 'IsIXP': True, 'IXPName': u'AMS-IX', 'Holder': u'AMS-IX1 Amsterdam Internet Exchange B.V.,NL', 'ASN': '1200'}

在这里,即使ams-ix宣布了它的对等lan前缀,ixps信息也被用来丰富结果,因为WhenUse是2。

>>> result = cache.GetIPInformation( "193.0.6.139" )
>>> result
{'HostName': 'www.ripe.net', 'TS': 1453068965, 'Prefix': u'193.0.0.0/21', 'IsIXP': False, 'IXPName': '', 'Holder': u'RIPE-NCC-AS Reseaux IP Europeens Network Coordination Centre (RIPE NCC),NL', 'ASN': '3333'}

www.ripe.net IP不在IXPS对等LAN上,因此^{TT28}$。

虫子?问题?

有虫子吗?请在github的https://github.com/pierky/ipdetailscache/issues上创建一个问题

作者

卡洛·奇奥迪码头-https://pierky.com

博客:https://blog.pierky.com

推特:@pierkyhttp://twitter.com/pierky

发布历史记录

0.4.8

  • 解决包装问题。

0.4.7

  • peeringdb api不再处于beta:url更新状态。

0.4.6

修复
  • 缓存IP地址过期时的错误行为。

0.4.5

修复

  • ixps信息中的行为变化:如果需要!=0检查ixps信息,也检查具有isixp==none的缓存地址

0.4.4

修复
  • 在ixps信息下载中强制使用utf-8

0.4.3

修复
  • 如果peeringdb中缺少或错误的ixps信息,请引发ipdetailscacheixpinformationerror

0.4.0至0.4.2

新功能
  • 新的打包版本
  • PEP8
  • .md到.rst以获得更好的pypi可读性

0.3.0

新功能
  • IXPS信息

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java如何创建Restful服务并将其部署到OSGi容器?   java如何获取用户在EditText中输入的时间并从中扣除5小时30分钟?   java用户无法注销firebase 安卓   java Undertow始终将字符集添加到ContentType头,即使它不是文本MIME类型   java LocalBroadcastManager未正确接收消息   foreach在Java中有没有比For循环更好的方法可以灵活地遍历集合?   java如何在安卓上移动球   在OSGi下的Log4j中使所有记录器异步时,java ClassNotFoundException   java未知输入字节长度转换为int   java测试工厂在使用前缀命名时抛出NPE   对象的副本(JAVA)   java SP20310:无法打开文件。sql   java Spring安全性仅为一条路径添加安全性   java在idea中获取菱形运算符的编译错误