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实现图片批量剪切示例
Mar 25 Python
Python入门及进阶笔记 Python 内置函数小结
Aug 09 Python
使用Node.js和Socket.IO扩展Django的实时处理功能
Apr 20 Python
Flask数据库迁移简单介绍
Oct 24 Python
python中abs&amp;map&amp;reduce简介
Feb 20 Python
Python绘制KS曲线的实现方法
Aug 13 Python
Python global全局变量函数详解
Sep 18 Python
对Python中实现两个数的值交换的集中方法详解
Jan 11 Python
Django框架实现分页显示内容的方法详解
May 10 Python
浅析Python 引号、注释、字符串
Jul 25 Python
Python random模块制作简易的四位数验证码
Feb 01 Python
python matplotlib imshow热图坐标替换/映射实例
Mar 14 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实现阳历到农历转换的类实例
2015/03/07 PHP
Js 代码中,ajax请求地址后加随机数防止浏览器缓存的原因
2013/05/07 Javascript
js算法中的排序、数组去重详细概述
2013/10/14 Javascript
文档对象模型DOM通俗讲解
2013/11/01 Javascript
javascript客户端遍历控件与获取父容器对象示例代码
2014/01/06 Javascript
JavaScript利用append添加元素报错的解决方法
2014/07/01 Javascript
javascript弹出窗口实现代码
2015/11/12 Javascript
完美实现bootstrap分页查询
2015/12/09 Javascript
Vuejs第十三篇之组件——杂项
2016/09/09 Javascript
利用node.js如何搭建一个简易的即时响应服务器
2017/05/28 Javascript
js代码规范之Eslint安装与配置详解
2018/09/08 Javascript
CryptoJS中AES实现前后端通用加解密技术
2018/12/18 Javascript
vue实现移动端省市区选择
2019/09/27 Javascript
微信小程序开发数据缓存基础知识辨析及运用实例详解
2020/11/06 Javascript
[54:30]Liquid vs Newbee 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/16 DOTA
使用Python中的greenlet包实现并发编程的入门教程
2015/04/16 Python
【Python】Python的urllib模块、urllib2模块批量进行网页下载文件
2016/11/19 Python
Flask框架模板继承实现方法分析
2019/07/31 Python
Python数据分析pandas模块用法实例详解
2019/11/20 Python
Python基础之函数原理与应用实例详解
2020/01/03 Python
tensorflow pb to tflite 精度下降详解
2020/05/25 Python
Lowe’s加拿大:家居装修、翻新和五金店
2019/12/06 全球购物
Aurora London官网:奢华、负担得起的皮革手袋
2020/08/01 全球购物
如何利用cmp命令比较文件
2016/04/11 面试题
机电一体化专业应届生求职信
2013/11/27 职场文书
法律专业学生的自我评价
2014/02/07 职场文书
军训感想500字
2014/02/20 职场文书
企业精神口号
2014/06/11 职场文书
医院义诊活动总结
2014/07/04 职场文书
党的群众路线教育实践活动领导班子整改措施
2014/09/30 职场文书
房产协议书范本
2014/10/18 职场文书
高中生打架检讨书1000字
2015/02/17 职场文书
2016小学教师读书心得体会
2016/01/13 职场文书
《大禹治水》教学反思
2016/02/22 职场文书
解决Golang中ResponseWriter的一个坑
2021/04/27 Golang
详解Laravel框架的依赖注入功能
2021/05/27 PHP