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 相关文章推荐
初步剖析C语言编程中的结构体
Jan 16 Python
python 链接和操作 memcache方法
Mar 04 Python
python matplotlib绘图,修改坐标轴刻度为文字的实例
May 25 Python
python取数作为临时极大值(极小值)的方法
Oct 15 Python
解决在pycharm中显示额外的 figure 窗口问题
Jan 15 Python
Python大数据之网络爬虫的post请求、get请求区别实例分析
Nov 16 Python
Python实现密码薄文件读写操作
Dec 16 Python
python在不同条件下的输入与输出
Feb 13 Python
Python使用扩展库pywin32实现批量文档打印实例
Apr 09 Python
通过代码实例解析Pytest运行流程
Aug 20 Python
Python基础之hashlib模块详解
May 06 Python
python 提取html文本的方法
May 20 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 转换字符串编码 iconv与mb_convert_encoding的区别说明
2011/11/10 PHP
thinkphp视图模型查询提示ERR: 1146:Table 'db.pr_order_view' doesn't exist的解决方法
2014/10/30 PHP
PHP+swoole+linux实现系统监控和性能优化操作示例
2019/04/15 PHP
jQuery 处理网页内容的实现代码
2010/02/15 Javascript
jQuery Selector选择器小结
2010/05/06 Javascript
json格式化/压缩工具 Chrome插件扩展版
2010/05/25 Javascript
IE6、IE7中获取Button元素的值的bug说明
2011/08/28 Javascript
js的参数有长度限制吗?发现不能超过2083个字符
2014/04/20 Javascript
Javascript获取当前日期的农历日期代码
2014/10/08 Javascript
使用JavaScript实现连续滚动字幕效果的方法
2015/07/07 Javascript
javascript实现类似于新浪微博搜索框弹出效果的方法
2015/07/27 Javascript
高性能JavaScript 重排与重绘(2)
2015/08/11 Javascript
JavaScript继承学习笔记【新手必看】
2016/05/10 Javascript
jQuery 翻页组件yunm.pager.js实现div局部刷新的思路
2016/08/11 Javascript
Node.js的基本知识简单汇总
2016/09/19 Javascript
jQuery 常见小例汇总
2016/12/14 Javascript
vue系列之requireJs中引入vue-router的方法
2018/07/18 Javascript
Vue CLI 3.x 自动部署项目至服务器的方法
2019/04/02 Javascript
Vue路由守卫之路由独享守卫
2019/09/25 Javascript
Vue实现点击箭头上下移动效果
2020/06/11 Javascript
python读取Android permission文件
2013/11/01 Python
python的pandas工具包,保存.csv文件时不要表头的实例
2018/06/14 Python
Python面向对象之类和对象属性的增删改查操作示例
2018/12/14 Python
在PYQT5中QscrollArea(滚动条)的使用方法
2019/06/14 Python
简单了解python高阶函数map/reduce
2019/06/28 Python
python异步编程 使用yield from过程解析
2019/09/25 Python
pytorch 实现查看网络中的参数
2020/01/06 Python
python实现简单的五子棋游戏
2020/09/01 Python
GOOD AMERICAN官网:为曲线性感而设计
2017/12/28 全球购物
俄罗斯有趣和原创礼物网上商店:MagicMag
2019/08/01 全球购物
法警的竞聘演讲稿
2014/01/02 职场文书
汽车专业学生自我评价
2014/01/19 职场文书
全国爱眼日活动总结
2015/02/27 职场文书
大学生就业推荐表自我评价
2015/03/02 职场文书
2015年学校禁毒工作总结
2015/05/27 职场文书
JavaScript文档对象模型DOM
2021/11/20 Javascript