>  기사  >  백엔드 개발  >  Python은 무고한 IP 데이터베이스에 액세스합니다.

Python은 무고한 IP 데이터베이스에 액세스합니다.

巴扎黑
巴扎黑원래의
2016-12-08 10:01:511835검색

#!/usr/bin/env python  

#site www.jbxue.com  

#   

# -*- 코딩: utf-8 -*-

  

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 = 참   

   

def ip_from(ip):   

_init()   

i = ip2int(ip)   

idx = bisect(_LIST1, i)   

assert(idx > 0)   

if len(_LIST1) <= idx:   

return u'unknown ip 주소 %s' % ip   

else:   

frm, to ,addr = _LIST2[idx - 1]   

if frm <= i <= to:

반환 주소   

그 외:   

알 수 없는 IP 주소 %s' % IP를 반환  

  

__name__ =='인 경우 반환 __main__':   

인쇄 ip_from('115.238.54.106')   

인쇄 ip_from('220.181.29.160')   

인쇄 ip_from('115.238.54.107')   

ip_from('8.8.8.8') 인쇄   


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.