python访问纯真IP数据库(实例)

发布时间:2020-11-27编辑:脚本学堂
分享一例python实现的访问纯真IP数据库的代码,通过IP地址判断客户端是网通或电信,有需要的朋友不妨参考学习下。

项目需求:
通过IP地址判断客户端是网通还是电信。
用到了纯文本的IP纯真数据库,用python写了一个小程序,分享如下。

代码:
 

复制代码 代码示例:
#!/usr/bin/env python 
# -*- coding: utf-8 -*- 
#edit: www.jb200.com
#
from bisect import bisect 
 
_LIST1, _LIST2 = [], [] 
_INIT = False 
 
ip2int = lambda ip_str: reduce(lambda a, b: (a << 8) + b, [int(i) for i in ip_str.split('.')]) 
 
def _init(): 
    global _LIST, _INIT 
    if not _INIT: 
        for l in open('ipdata.txt', 'rb'): 
            ip1, ip2 = l.split()[:2] 
            addr = ' '.join(l.split()[2:]) 
            ip1, ip2 = ip2int(ip1), ip2int(ip2) 
            _LIST1.append(ip1) 
            _LIST2.append((ip1, ip2, addr)) 
        _INIT = True 
     
def ip_from(ip): 
    _init() 
    i = ip2int(ip) 
    idx = bisect(_LIST1, i) 
    assert(idx > 0) 
    if len(_LIST1) <= idx: 
        return u'unknown ip address %s' % ip 
    else: 
        frm, to ,addr = _LIST2[idx - 1] 
        if frm <= i <= to: 
            return addr 
        else: 
            return u'unknown ip address %s' % ip 
#--IP纯真数据库,调用示例    
if __name__ == '__main__': 
    print ip_from('115.238.54.106') 
    print ip_from('220.181.29.160') 
    print ip_from('115.238.54.107') 
    print ip_from('8.8.8.8')
 

以上分享了python访问纯真ip数据库的例子,并演示了bisect模块的用法,希望对大家有所帮助。