使用ripestat api收集ip地址详细信息(asn、前缀、资源持有者、反向dns)的python库
ipdetailscache的Python项目详细描述
ipdetailscache
使用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)。
您需要ipaddr或IPy;此库的版本>;=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_FILE和IP_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上创建一个问题
发布历史记录
0.4.8
- 解决包装问题。
0.4.7
- peeringdb api不再处于beta:url更新状态。
0.4.6
修复
- 缓存IP地址过期时的错误行为。
0.4.5
修复
- ixps信息中的行为变化:如果需要!=0检查ixps信息,也检查具有isixp==none的缓存地址