您好, 欢迎来到 !    登录 | 注册 | | 设为首页 | 收藏本站

Python访问纯真IP数据库脚本分享

5b51 2022/1/14 8:21:43 python 字数 2290 阅读 479 来源 www.jb51.cc/python

项目中有这样的需求,通过IP地址判断客户端是网通的还是电信的。从同事那拿了个纯文本的IP纯真数据库,用Python写了一个小程序,感觉挺好的。下面给出实现源码:

概述

项目中有这样的需求,通过IP地址判断客户端是网通的还是电信的。从同事那拿了个纯文本的IP纯真数据库,用Python写了一个小程序,感觉挺好的。下面给出实现源码:

#!/usr/bin/env python
# -*- coding: 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 = 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
  
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数据库脚本分享全部内容,希望文章能够帮你解决Python访问纯真IP数据库脚本分享所遇到的程序开发问题。


如果您也喜欢它,动动您的小指点个赞吧

除非注明,文章均由 laddyq.com 整理发布,欢迎转载。

转载请注明:
链接:http://laddyq.com
来源:laddyq.com
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。


联系我
置顶