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中的MongoDB基本操作:连接、查询实例
Feb 13 Python
Python数据结构与算法之字典树实现方法示例
Dec 13 Python
Python matplotlib通过plt.scatter画空心圆标记出特定的点方法
Dec 13 Python
解决新django中的path不能使用正则表达式的问题
Dec 18 Python
Django中多种重定向方法使用详解
Jul 17 Python
Python学习笔记之函数的定义和作用域实例详解
Aug 13 Python
Python+OpenCv制作证件图片生成器的操作方法
Aug 21 Python
python爬虫可以爬什么
Jun 16 Python
python利用os模块编写文件复制功能——copy()函数用法
Jul 13 Python
ASP.NET Core中的配置详解
Feb 05 Python
python批量提取图片信息并保存的实现
Feb 05 Python
Python循环之while无限迭代
Apr 30 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
mysql5详细安装教程
2007/01/15 PHP
php md5下16位和32位的实现代码
2008/04/09 PHP
php循环输出数据库内容的代码
2008/05/24 PHP
php面向对象全攻略 (七) 继承性
2009/09/30 PHP
PHP读取CURL模拟登录时生成Cookie文件的方法
2014/11/04 PHP
详谈PHP文件目录基础操作
2014/11/11 PHP
jQuery 浮动广告实现代码
2008/12/25 Javascript
Document 对象的常用方法
2009/07/31 Javascript
关于jQuery $.isNumeric vs. $.isNaN vs. isNaN
2013/04/15 Javascript
用JS将搜索的关键字高亮显示实现代码
2013/11/08 Javascript
JavaScript实现的encode64加密算法实例分析
2015/04/15 Javascript
javascript中in运算符用法分析
2015/04/28 Javascript
在Node.js应用中使用Redis的方法简介
2015/06/24 Javascript
JS+CSS实现经典的左侧竖向滑动菜单效果
2015/09/23 Javascript
微信小程序开发之从相册获取图片 使用相机拍照 本地图片上传
2017/04/18 Javascript
vuejs+element-ui+laravel5.4上传文件的示例代码
2017/08/12 Javascript
vue实现底部菜单功能
2018/07/24 Javascript
在vue 中使用 less的教程详解
2018/09/26 Javascript
[01:10]DOTA2亚洲邀请赛 征战号角响彻全场
2015/01/06 DOTA
python分析nignx访问日志脚本分享
2015/02/26 Python
详解python的webrtc库实现语音端点检测
2017/05/31 Python
使用Python爬取最好大学网大学排名
2018/02/24 Python
Python基于百度AI的文字识别的示例
2018/04/21 Python
Python编程在flask中模拟进行Restful的CRUD操作
2018/12/28 Python
Pytorch之finetune使用详解
2020/01/18 Python
哥德堡通行证:Gothenburg Pass
2019/12/09 全球购物
会计专业毕业生自我鉴定
2013/10/29 职场文书
商务日语毕业生自荐信范文
2013/11/14 职场文书
优秀学生自我鉴定范例
2013/12/18 职场文书
餐饮业会计岗位职责
2013/12/19 职场文书
外贸专业求职信
2014/03/09 职场文书
党员承诺践诺书
2014/05/20 职场文书
公司优秀员工获奖感言
2014/08/14 职场文书
卫校毕业生自我鉴定
2014/09/28 职场文书
护理专业自我评价
2015/03/11 职场文书
聘任通知书
2015/09/21 职场文书