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实现根据ip地址反向查找主机名称的方法
Apr 29 Python
python3写的简单本地文件上传服务器实例
Jun 04 Python
python学生信息管理系统(初级版)
Oct 17 Python
在python中pandas的series合并方法
Nov 12 Python
Python选择网卡发包及接收数据包
Apr 04 Python
10分钟用python搭建一个超好用的CMDB系统
Jul 17 Python
Apache部署Django项目图文详解
Jul 30 Python
python实现监控阿里云账户余额功能
Dec 16 Python
推荐8款常用的Python GUI图形界面开发框架
Feb 23 Python
PyTorch加载自己的数据集实例详解
Mar 18 Python
Python 如何利用ffmpeg 处理视频素材
Nov 27 Python
Python内置包对JSON文件数据进行编码和解码
Apr 12 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中读写文件实现代码
2011/10/20 PHP
基于PHPExcel的常用方法总结
2013/06/13 PHP
php生成扇形比例图实例
2013/11/06 PHP
php简单分页类实现方法
2015/02/26 PHP
PHP数组操作――获取数组最后一个值的方法
2015/04/14 PHP
PHP实现的mysql主从数据库状态检测功能示例
2017/07/20 PHP
Javascript实现CheckBox的全选与取消全选的代码
2010/07/20 Javascript
基于jquery的可多选的下拉列表框
2012/07/20 Javascript
JavaScript高级程序设计(第3版)学习笔记5 js语句
2012/10/11 Javascript
addEventListener和attachEvent二者绑定的执行函数中的this不相同
2012/12/09 Javascript
JS取request值以及自动执行使用示例
2014/02/24 Javascript
超级给力的JavaScript的React框架入门教程
2015/07/02 Javascript
Javascript生成全局唯一标识符(GUID,UUID)的方法
2016/02/27 Javascript
jQuery EasyUI学习教程之datagrid点击列表头排序
2016/07/09 Javascript
JavaScript中setter和getter方法介绍
2016/07/11 Javascript
用headjs来管理和加载js 提高网站加载速度
2016/11/29 Javascript
详解Node.js中exports和module.exports的区别
2017/04/19 Javascript
js轮播图透明度切换(带上下页和底部圆点切换)
2017/04/27 Javascript
webstorm和.vue中es6语法报错的解决方法
2018/05/08 Javascript
vue 修改 data 数据问题并实时显示的方法
2018/08/27 Javascript
python实现udp数据报传输的方法
2014/09/26 Python
python实现模拟按键,自动翻页看u17漫画
2015/03/17 Python
Python2.7基于淘宝接口获取IP地址所在地理位置的方法【测试可用】
2017/06/07 Python
python简单贪吃蛇开发
2019/01/28 Python
Python3几个常见问题的处理方法
2019/02/26 Python
解决python执行不输出系统命令弹框的问题
2019/06/24 Python
Python基于tkinter canvas实现图片裁剪功能
2020/11/05 Python
网购亚洲时装、美容产品和生活百货:YesStyle
2016/09/15 全球购物
超市后勤自我鉴定
2014/01/17 职场文书
职称评定自我鉴定
2014/03/18 职场文书
电子商务实训报告总结
2014/11/05 职场文书
公司备用金管理制度
2015/08/04 职场文书
交通事故责任认定书
2015/08/06 职场文书
旅行社计调工作总结
2015/08/12 职场文书
如何拟写通知正文?
2019/04/02 职场文书
Vue项目打包、合并及压缩优化网页响应速度
2021/07/07 Vue.js