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输出当前目录下index.html文件路径的方法
Apr 28 Python
python从sqlite读取并显示数据的方法
May 08 Python
python实现下载指定网址所有图片的方法
Aug 08 Python
在Python中通过threading模块定义和调用线程的方法
Jul 12 Python
django如何连接已存在数据的数据库
Aug 14 Python
利用Python求阴影部分的面积实例代码
Dec 05 Python
Python实现程序判断季节的代码示例
Jan 28 Python
python 杀死自身进程的实现方法
Jul 01 Python
python实现邮件发送功能
Aug 10 Python
Python使用grequests并发发送请求的示例
Nov 05 Python
基于PyInstaller各参数的含义说明
Mar 04 Python
基于PyTorch实现一个简单的CNN图像分类器
May 29 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
ThinkPHP CURD方法之data方法详解
2014/06/18 PHP
PHP页面输出时js设置input框的选中值
2016/09/30 PHP
php连接mysql数据库
2017/03/21 PHP
关于Laravel参数验证的一些疑与惑
2019/11/19 PHP
PhpStorm 2020.3:新增开箱即用的PHP 8属性(推荐)
2020/10/30 PHP
文本加密解密
2006/06/23 Javascript
javascript 定义新对象方法
2010/02/20 Javascript
JS setCapture 区域外事件捕捉
2010/03/18 Javascript
javascript开发技术大全-第1章javascript概述
2011/07/03 Javascript
Nodejs基于LRU算法实现的缓存处理操作示例
2017/03/17 NodeJs
详解mpvue开发小程序小总结
2018/07/25 Javascript
说说如何利用 Node.js 代理解决跨域问题
2019/04/22 Javascript
javascript实现遮罩层动态效果实例
2019/05/14 Javascript
vue实现移动端返回顶部
2020/10/12 Javascript
vue项目页面嵌入代码块vue-prism-editor的实现
2020/10/30 Javascript
[06:07]辉夜杯现场观众互动 “比谁远送显示器”
2015/12/26 DOTA
python清除字符串里非字母字符的方法
2015/07/02 Python
windows上安装Anaconda和python的教程详解
2017/03/28 Python
python3 读写文件换行符的方法
2018/04/09 Python
numpy中实现ndarray数组返回符合特定条件的索引方法
2018/04/17 Python
计算机二级python学习教程(1) 教大家如何学习python
2019/05/16 Python
django与vue的完美结合_实现前后端的分离开发之后在整合的方法
2019/08/12 Python
python3.7将代码打包成exe程序并添加图标的方法
2019/10/11 Python
python实现广度优先搜索过程解析
2019/10/19 Python
python实现输入三角形边长自动作图求面积案例
2020/04/12 Python
什么是"引用"?申明和使用"引用"要注意哪些问题?
2016/03/03 面试题
新闻网站实习自我鉴定
2013/09/25 职场文书
留学自荐信的技巧
2013/10/17 职场文书
人事部经理岗位职责
2014/03/07 职场文书
实现中国梦思想汇报2014
2014/09/13 职场文书
同乡会致辞
2015/07/30 职场文书
幼儿园家长心得体会
2016/01/21 职场文书
2019年大学生职业生涯规划书
2019/03/25 职场文书
最新农村养殖致富:资金投入较低的创业项目有哪些?
2019/09/26 职场文书
教你使用vscode 搭建react-native开发环境
2021/07/07 Javascript
Pandas实现DataFrame的简单运算、统计与排序
2022/03/31 Python