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破解验证码实例详解
Dec 08 Python
Python编写一个优美的下载器
Apr 15 Python
Python实现去除列表中重复元素的方法小结【4种方法】
Apr 27 Python
Python中文件的读取和写入操作
Apr 27 Python
利用python库在局域网内传输文件的方法
Jun 04 Python
opencv实现图片模糊和锐化操作
Nov 19 Python
Python实现KNN(K-近邻)算法的示例代码
Mar 05 Python
python Kmeans算法原理深入解析
Aug 23 Python
python中加背景音乐如何操作
Jul 19 Python
python dict如何定义
Sep 02 Python
python 实现非极大值抑制算法(Non-maximum suppression, NMS)
Oct 15 Python
Python 数据可视化之Seaborn详解
Nov 02 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
浅析iis7.5安装配置php环境
2015/05/10 PHP
各种快递查询--Api接口
2016/04/26 PHP
thinkPHP5.0框架独立配置与动态配置方法
2017/03/17 PHP
微信公众号实现会员卡领取功能
2017/06/08 PHP
js 方法实现返回多个数据的代码
2009/04/30 Javascript
javascript作用域容易记错的两个地方分析
2012/06/22 Javascript
javascript正则表达式使用replace()替换手机号的方法
2015/01/19 Javascript
JavaScript判断图片是否已经加载完毕的方法汇总
2016/02/05 Javascript
js简单判断移动端系统的方法
2016/02/25 Javascript
AngularJS基础 ng-readonly 指令简单示例
2016/08/02 Javascript
快速实现JS图片懒加载(可视区域加载)示例代码
2017/01/04 Javascript
jquery实现左右滑动式轮播图
2017/03/02 Javascript
微信小程序 本地数据存储实例详解
2017/04/13 Javascript
详谈for循环里面的break和continue语句
2017/07/20 Javascript
EasyUI在Panel上动态添加LinkButton按钮
2017/08/11 Javascript
js处理包含中文的字符串实例
2017/10/11 Javascript
Vue多种方法实现表头和首列固定的示例代码
2018/02/02 Javascript
Vue的土著指令和自定义指令实例详解
2018/02/04 Javascript
angular 实现的输入框数字千分位及保留几位小数点功能示例
2018/06/19 Javascript
微信小程序实现tab左右切换效果
2020/11/15 Javascript
vue的过滤器filter实例详解
2018/09/17 Javascript
对于防止按钮重复点击的尝试详解
2019/04/22 Javascript
mpvue微信小程序开发之实现一个弹幕评论
2019/11/24 Javascript
Vue解决echart在element的tab切换时显示不正确问题
2020/08/03 Javascript
基于postman获取动态数据过程详解
2020/09/08 Javascript
[48:00]EG vs LGD 2018国际邀请赛淘汰赛BO3 第二场 8.26
2018/08/29 DOTA
Python实现的数据结构与算法之基本搜索详解
2015/04/22 Python
快速了解Python中的装饰器
2018/01/11 Python
浅谈Pandas中map, applymap and apply的区别
2018/04/10 Python
Python猫眼电影最近上映的电影票房信息
2020/09/18 Python
CSS3 transition 实现通知消息轮播条
2020/10/14 HTML / CSS
用HTML5 实现橡皮擦的涂抹效果的教程
2015/05/11 HTML / CSS
宿舍违规检讨书
2014/01/12 职场文书
四风问题对照检查材料整改措施
2014/09/27 职场文书
2015年度党员自我评价范文
2015/03/03 职场文书
win11开机发生死循环重启怎么办?win11开机发生死循环重启解决方法
2022/08/05 数码科技