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 13 Python
Python过滤函数filter()使用自定义函数过滤序列实例
Aug 26 Python
为什么选择python编程语言入门黑客攻防 给你几个理由!
Feb 02 Python
wxpython实现图书管理系统
Mar 12 Python
Python装饰器原理与用法分析
Apr 30 Python
Python使用tkinter库实现文本显示用户输入功能示例
May 30 Python
Python文件常见操作实例分析【读写、遍历】
Dec 10 Python
Django 路由控制的实现
Jul 17 Python
Python 实现的 Google 批量翻译功能
Aug 26 Python
在python下实现word2vec词向量训练与加载实例
Jun 09 Python
Python WSGI 规范简介
Apr 11 Python
Python中glob库实现文件名的匹配
Jun 18 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防注入代码
2010/04/07 PHP
windows7下安装php的php-ssh2扩展教程
2014/07/04 PHP
Codeigniter框架的更新事务(transaction)BUG及解决方法
2014/07/25 PHP
教你识别简单的免查杀PHP后门
2015/09/13 PHP
php PDO判断连接是否可用的实现方法
2017/04/03 PHP
php回调函数处理数组操作示例
2020/04/13 PHP
一个非常全面的javascript URL解析函数和分段URL解析方法
2014/04/12 Javascript
对比分析AngularJS中的$http.post与jQuery.post的区别
2015/02/27 Javascript
AngularJS中实现显示或隐藏动画效果的方式总结
2015/12/31 Javascript
JS函数arguments数组获得实际传参数个数的实现方法
2016/05/28 Javascript
Extjs 点击复选框在表格中增加相关信息行
2016/07/12 Javascript
jquery插件锦集【推荐】
2016/12/16 Javascript
Node.js的Mongodb使用实例
2016/12/30 Javascript
JavaScript数组去重的6个方法
2017/01/21 Javascript
React-Native做一个文本输入框组件的实现代码
2017/08/10 Javascript
ionic2中使用自动生成器的方法
2018/03/04 Javascript
Vue表单及表单绑定方法
2018/09/04 Javascript
Node.js学习教程之Module模块
2019/09/03 Javascript
[43:24]完美世界DOTA2联赛PWL S3 INK ICE vs DLG 第二场 12.12
2020/12/17 DOTA
Python列出一个文件夹及其子目录的所有文件
2016/06/30 Python
利用python打开摄像头及颜色检测方法
2018/08/03 Python
PyCharm2018 安装及破解方法实现步骤
2019/09/09 Python
Python enumerate内置库用法解析
2020/02/24 Python
python GUI库图形界面开发之PyQt5访问系统剪切板QClipboard类详细使用方法与实例
2020/02/27 Python
Python使用lambda抛出异常实现方法解析
2020/08/20 Python
Python获取指定网段正在使用的IP
2020/12/14 Python
深入理解HTML的FormData对象
2016/05/17 HTML / CSS
First Aid Beauty官网:FAB急救面霜
2018/05/24 全球购物
Rowdy Gentleman服装和配饰:美好时光
2019/09/24 全球购物
英国豪华装饰照明品牌的在线零售商:Inspyer Lighting
2019/12/10 全球购物
eBay荷兰购物网站:eBay.nl
2020/06/26 全球购物
2019年Java 最常见的 面试题
2016/10/19 面试题
通用C#笔试题附答案
2016/11/26 面试题
八年级美术教学反思
2014/02/02 职场文书
社区母亲节活动总结
2015/02/10 职场文书
高中教师个人工作总结
2015/02/10 职场文书