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 20 Python
Python构造自定义方法来美化字典结构输出的示例
Jun 16 Python
利用pyinstaller或virtualenv将python程序打包详解
Mar 22 Python
python django使用haystack:全文检索的框架(实例讲解)
Sep 27 Python
numpy数组拼接简单示例
Dec 15 Python
Python实现字典按照value进行排序的方法分析
Dec 23 Python
python2 与python3的print区别小结
Jan 16 Python
Python中的枚举类型示例介绍
Jan 09 Python
Django框架模板用法入门教程
Nov 04 Python
wxpython绘制音频效果
Nov 18 Python
python连接mysql有哪些方法
Jun 24 Python
Python 统计序列中元素的出现频度
Apr 26 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
推荐文章系统(一)
2006/10/09 PHP
php 友好URL的实现(吐血推荐)
2008/10/04 PHP
PHP中数组合并的两种方法及区别介绍
2012/09/14 PHP
PHP中error_reporting()用法详解
2015/08/31 PHP
分享ThinkPHP3.2中关联查询解决思路
2015/09/20 PHP
详解WordPress中调用评论模板和循环输出评论的PHP函数
2016/01/05 PHP
PHP实现的敏感词过滤方法示例
2019/03/06 PHP
用jquery中插件dialog实现弹框效果实例代码
2013/11/15 Javascript
jQuery中 prop() attr()使用详解
2015/05/19 Javascript
原生js实现addClass,removeClass,hasClass方法
2016/04/27 Javascript
Bootstrap CSS布局之列表
2016/12/15 Javascript
Angular 4.X开发实践中的踩坑小结
2017/07/04 Javascript
jQuery实现对网页节点的增删改查功能示例
2017/09/18 jQuery
jQuery实现table表格checkbox全选的方法分析
2018/07/04 jQuery
vue中$nextTick的用法讲解
2019/01/17 Javascript
微信小程序实现单列下拉菜单效果
2019/04/25 Javascript
Python 文件读写操作实例详解
2014/03/12 Python
六个窍门助你提高Python运行效率
2015/06/09 Python
python dict.get()和dict['key']的区别详解
2016/06/30 Python
python Tkinter的图片刷新实例
2019/06/14 Python
Python Pandas数据结构简单介绍
2019/07/03 Python
基于python实现文件加密功能
2020/01/06 Python
Python+OpenCV实现旋转文本校正方式
2020/01/09 Python
CSS3 实现图形下落动画效果
2020/11/13 HTML / CSS
HTML5: Web 标准最巨大的飞跃
2008/10/17 HTML / CSS
谷歌浏览器小字体处理方案即12px以下字体
2013/12/17 HTML / CSS
使用纯HTML5编写一款网页上的时钟的代码分享
2015/11/16 HTML / CSS
如何给HTML标签中的文本设置修饰线
2019/11/18 HTML / CSS
副厂长岗位职责
2014/02/02 职场文书
中秋寄语大全
2014/04/11 职场文书
关于运动会的广播稿(10篇)
2014/09/12 职场文书
机关中层领导干部群众路线教育实践活动个人对照检查材料
2014/09/24 职场文书
端午节活动总结报告
2015/02/11 职场文书
2015年学生会工作总结范文
2015/03/31 职场文书
创业计划书之美甲店
2019/09/20 职场文书
MySQL sql模式设置引起的问题
2022/05/15 MySQL