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 基础学习第二弹 类属性和实例属性
Aug 27 Python
python操作mysql中文显示乱码的解决方法
Oct 11 Python
Python实现股市信息下载的方法
Jun 15 Python
听歌识曲--用python实现一个音乐检索器的功能
Nov 15 Python
一个Python最简单的接口自动化框架
Jan 02 Python
python实现下载pop3邮件保存到本地
Jun 19 Python
Django框架之DRF 基于mixins来封装的视图详解
Jul 23 Python
手机使用python操作图片文件(pydroid3)过程详解
Sep 25 Python
python 实现检验33品种数据是否是正态分布
Dec 09 Python
安装pyinstaller遇到的各种问题(小结)
Nov 20 Python
用python批量下载apk
Dec 29 Python
Django视图类型总结
Feb 17 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
预告映像公开!第1章续篇剧场版动画《Princess Principal Crown Handler》4月10日上映!
2020/03/06 日漫
phpmyadmin中禁止外网使用的方法
2014/11/04 PHP
简单了解将WordPress中的工具栏移到底部的小技巧
2015/12/31 PHP
PHP单例模式应用示例【多次连接数据库只实例化一次】
2018/12/18 PHP
在第一个input框内输入内容.textarea自动得到第一个文件框的值的javascript代码
2007/04/20 Javascript
兼容IE和Firefox火狐的上下、左右循环无间断滚动JS代码
2013/04/19 Javascript
jQuery查询数据返回object和字符串影响原因是什么
2013/08/09 Javascript
在css加载完毕后自动判断页面是否加入css或js文件
2014/09/10 Javascript
z-blog SyntaxHighlighter 长代码无法换行解决办法(jquery)
2014/11/16 Javascript
Node.js中的缓冲与流模块详细介绍
2015/02/11 Javascript
使用JavaScript制作一个简单的计数器的方法
2015/07/07 Javascript
JS实现的表格行鼠标点击高亮效果代码
2015/11/27 Javascript
jQuery隐藏和显示效果实现
2016/04/06 Javascript
vue实现一个移动端屏蔽滑动的遮罩层实例
2017/06/08 Javascript
Angular 2 利用Router事件和Title实现动态页面标题的方法
2017/08/23 Javascript
全站最详细的Vuex教程
2018/04/13 Javascript
swiper 自动图片无限轮播实现代码
2018/05/21 Javascript
jQuery+css last-child实现选择最后一个子元素操作示例
2018/12/10 jQuery
JavaScript中concat复制数组方法浅析
2019/01/20 Javascript
基于JS抓取某高校附近共享单车位置 使用web方式展示位置变化代码实例
2019/08/27 Javascript
JavaScript 面向对象程序设计详解【类的创建、实例对象、构造函数、原型等】
2020/05/12 Javascript
Jquery+AJAX实现无刷新上传并重命名文件操作示例【PHP后台接收】
2020/05/29 jQuery
将Django框架和遗留的Web应用集成的方法
2015/07/24 Python
python logging 日志轮转文件不删除问题的解决方法
2016/08/02 Python
Python线性方程组求解运算示例
2018/01/17 Python
在PyCharm下打包*.py程序成.exe的方法
2018/11/29 Python
利用matplotlib为图片上添加触发事件进行交互
2020/04/23 Python
Python Tricks 使用 pywinrm 远程控制 Windows 主机的方法
2020/07/21 Python
AVON雅芳官网:世界上最大的美容化妆品公司之一
2016/11/02 全球购物
亚马逊印度站:Amazon.in
2017/10/15 全球购物
NBA欧洲商店(英国):NBA Europe Store UK
2018/07/27 全球购物
SQL语言面试题
2013/08/27 面试题
银行职员思想汇报
2013/12/31 职场文书
顶岗实习计划书
2014/01/10 职场文书
临时租车协议范本
2014/09/23 职场文书
动视暴雪取消疫苗禁令 让所有员工返回线下工作
2022/04/03 其他游戏