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


Posted in Python onJune 29, 2015

项目中有这样的需求,通过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 相关文章推荐
深入解析Python中的WSGI接口
May 11 Python
Python使用cookielib模块操作cookie的实例教程
Jul 12 Python
vue.js实现输入框输入值内容实时响应变化示例
Jul 07 Python
Python使用win32com模块实现数据库表结构自动生成word表格的方法
Jul 17 Python
10 分钟快速入门 Python3的教程
Jan 29 Python
利用python如何在前程无忧高效投递简历
May 07 Python
Django对数据库进行添加与更新的例子
Jul 12 Python
python将时分秒转换成秒的实例
Dec 07 Python
Python列表去重复项的N种方法(实例代码)
May 12 Python
在pycharm中使用matplotlib.pyplot 绘图时报错的解决
Jun 01 Python
Pytorch 扩展Tensor维度、压缩Tensor维度的方法
Sep 09 Python
python实现web邮箱扫描的示例(附源码)
Mar 30 Python
Python实现把数字转换成中文
Jun 29 #Python
Python中if __name__ == '__main__'作用解析
Jun 29 #Python
django接入新浪微博OAuth的方法
Jun 29 #Python
python链接Oracle数据库的方法
Jun 28 #Python
python写日志封装类实例
Jun 28 #Python
Python实现的简单hangman游戏实例
Jun 28 #Python
python实现矩阵乘法的方法
Jun 28 #Python
You might like
php 方便水印和缩略图的图形类
2009/05/21 PHP
thinkPHP框架整合tcpdf插件操作示例
2018/08/07 PHP
jquery中使用ajax获取远程页面信息
2011/11/13 Javascript
比较新旧两个数组值得增加和删除的JS代码
2013/10/30 Javascript
面向对象设计模式的核心法则
2013/11/10 Javascript
jquery通过load获取文件的内容并跳到锚点的方法
2015/01/29 Javascript
javascript组合使用构造函数模式和原型模式实例
2015/06/04 Javascript
ajax在兼容模式下失效的快速解决方法
2016/03/22 Javascript
jQuery webuploader分片上传大文件
2016/11/07 Javascript
微信小程序 switch组件详解及简单实例
2017/01/10 Javascript
javascript判断元素存在和判断元素存在于实时的dom中的方法
2017/01/17 Javascript
vue中element 上传功能的实现思路
2018/07/06 Javascript
js实现ATM机存取款功能
2020/10/27 Javascript
详解javascript函数写法大全
2019/03/25 Javascript
jQuery实现提交表单时不提交隐藏div中input的方法
2019/10/08 jQuery
浅谈如何优雅处理JavaScript异步错误
2019/11/12 Javascript
JS数组方法slice()用法实例分析
2020/01/18 Javascript
Python 列表(List)操作方法详解
2014/03/11 Python
python 去除txt文本中的空格、数字、特定字母等方法
2018/07/24 Python
python实现学员管理系统
2019/02/26 Python
python实现同一局域网下传输图片
2020/03/20 Python
详解python的xlwings库读写excel操作总结
2021/02/26 Python
详解通过变换矩阵实现canvas的缩放功能
2019/01/14 HTML / CSS
Vision Directa智利眼镜网:框架眼镜、隐形眼镜和名牌太阳眼镜
2016/11/23 全球购物
在校生汽车维修实习自我鉴定
2013/09/19 职场文书
物业管理个人自我评价
2013/11/08 职场文书
毕业生大学生活自我总结
2014/01/31 职场文书
幸福家庭事迹材料
2014/02/03 职场文书
幼儿园五一活动方案
2014/02/07 职场文书
爱护花草树木的标语
2014/06/11 职场文书
自主招生学校推荐信
2014/09/26 职场文书
党员个人批评与自我批评
2014/10/14 职场文书
解除同居协议书
2015/01/29 职场文书
万里长城导游词
2015/01/30 职场文书
2015年语言文字工作总结
2015/07/23 职场文书
日本十大血腥动漫,那些被禁播的动漫盘点
2022/03/21 日漫