Python实现一个转存纯真IP数据库的脚本分享


Posted in Python onMay 21, 2017

前言

之前写过很多关于扫描脚本的文章,一直都没写自己的扫描IP段是哪里搞来的,也会有朋友经常来问一些扫描经验,说实话我觉得这个工具并没有实际的技术含量,但是能提高工作效率,就共享出来给大家耍耍~

谈到扫描经验,我个人通常都会针对不同的设备,不同的应用选择不同类型的段。

比如我现在扫描的目标是一款电信光猫,那自然是选择电信的IP段,光猫一般是家庭用户,我们筛选下家庭用户的活跃IP段,这样我们就有针对性了。

再比如我现在想扫一款企业路由设备,那么我就可以选择企业公司多的段。

纯真IP真心是个不错的工具,我通常用来检索某个地区的IP段,但是这个工具有个非常致命的缺点,就是不能联合查询,这就令人非常蛋疼了,而且这玩意每次用都要切换到win下面操作,对于我这种Linux党来说自然是无法忍,索性写个把纯真IP转存到mysql数据库的脚本,这样不用每次查询都去win下面,还可以直接部署到远程,查询方便了很多,最主要的还是支持多条件查询。

需求

Python写这个脚本技术上难度不大,主要还是用到了MySQLdb库,关于MySQLdb库的安装就不多说了,博客之前有写相关的文章。这里咱们需要先分析下纯真IP数据库的数据文件结构,发现其实每一行的结构都是固定的,那么写起来就简单了。

编码这块我就不详细说了,简单几个方法就能轻松实现,贴出来代码

#!/usr/bin/env python
# coding=utf-8
# kbdancer@92ez.com

import MySQLdb
import sys

reload(sys)
sys.setdefaultencoding('utf8')


def save_data_to_mysql(mysql_object, ip_line):
 try:
  begin = ip_line[0:16].replace(' ', '')
  end = ip_line[16:32].replace(' ', '')
  try:
   location = line[32:].split(' ')[0]
  except:
   location = ''
  try:
   isp_type = line[32:].replace(' ', ' ').split(' ')[1].replace('\n', '').replace('\r', '')
  except:
   isp_type = ''

  this_line_value = [begin + "-" + end, location, isp_type]
  do_insert(mysql_object, this_line_value)
 except Exception, e:
  print e


def do_insert(mysql_object, row_data):
 try:
  insert_sql = """INSERT INTO `ipdb` (`iprange`,`location`, `type`) VALUES ( %s, %s, %s )"""
  mysql_object.insert(insert_sql, row_data)
 except Exception, e:
  print row_data
  print e


class Database:
 host = 'localhost'
 user = 'ipdb'
 password = '3u9whrpcEUBTnNNn'
 db = 'ipinfo'
 charset = 'utf8'

 def __init__(self):
  self.connection = MySQLdb.connect(self.host, self.user, self.password, self.db, charset=self.charset)
  self.cursor = self.connection.cursor()

 def insert(self, query, params):
  try:
   self.cursor.execute(query, params)
   self.connection.commit()
  except Exception, e:
   print e
   self.connection.rollback()

 def query(self, query, params):
  cursor = self.connection.cursor(MySQLdb.cursors.DictCursor)
  cursor.execute(query, params)
  return cursor.fetchall()

 def __del__(self):
  self.connection.close()


if __name__ == '__main__':
 mysql = Database()
 ip_file = open(sys.path[0] + "/ip.txt")
 print 'Start save to mysql ...'
 for line in ip_file:
  save_data_to_mysql(mysql, line)
 ip_file.close()
 print 'Save complete.'

注意

这里存在一个性能问题,就是遍历所有数据的时候需要进行插入数据库的操作,单行插入的效率是非常低的,建议使用多行插入,比如说写个缓存数组,当缓存数组达到规定的条数,比如达到100条的时候,一次性把100条存入到数据库,这个速度比单条存入要快得多。博主我在这里就挖个坑,希望使用脚本的朋友能自己修改,改起来也不难。

由于纯真IP数据库导出的txt文件并不是标准的无BOM UTF8编码,直接解析肯定是失败的,建议使用Notepad++先转码一下

效果

原始数据

Python实现一个转存纯真IP数据库的脚本分享

转存之后的数据

Python实现一个转存纯真IP数据库的脚本分享

使用

首先需要导出纯真ip数据库为txt文档,这里我导出为ip.txt

然后放到Py脚本同一目录

对了,首先你还得有mysql数据库

然后导入数据库结构,就是那个sql文件

接着你还得修改脚本里面的mysql连接密码等

最后执行Py脚本就好了

说明

所有代码都托管在Github

地址 https://github.com/kbdancer/myTools/tree/master/czip2mysql

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Python 相关文章推荐
400多行Python代码实现了一个FTP服务器
May 10 Python
Python中的闭包总结
Sep 18 Python
python字典排序实例详解
May 20 Python
Python中atexit模块的基本使用示例
Jul 08 Python
Python多线程、异步+多进程爬虫实现代码
Feb 17 Python
Python装饰器原理与用法分析
Apr 30 Python
python实现图片筛选程序
Oct 24 Python
解决Pycharm运行时找不到文件的问题
Oct 29 Python
selenium跳过webdriver检测并模拟登录淘宝
Jun 12 Python
用python实现学生管理系统
Jul 24 Python
python3 通过 pybind11 使用Eigen加速代码的步骤详解
Dec 07 Python
Python快速实现一键抠图功能的全过程
Jun 29 Python
Python学习小技巧之利用字典的默认行为
May 20 #Python
Python学习小技巧之列表项的排序
May 20 #Python
Python学习小技巧之列表项的推导式与过滤操作
May 20 #Python
Python yield 使用方法浅析
May 20 #Python
Python学习小技巧之列表项的拼接
May 20 #Python
Django验证码的生成与使用示例
May 20 #Python
Linux RedHat下安装Python2.7开发环境
May 20 #Python
You might like
PHP调用三种数据库的方法(3)
2006/10/09 PHP
php session_start()出错原因分析及解决方法
2013/10/28 PHP
win7计划任务定时执行PHP脚本设置图解
2014/05/09 PHP
PHP采集类Snoopy抓取图片实例
2014/06/19 PHP
PHP实现把文本中的URL转换为链接的auolink()函数分享
2014/07/29 PHP
在Win7 中为php扩展配置Xcache
2014/10/08 PHP
laravel返回统一格式错误码问题
2019/11/04 PHP
PHP7 list() 函数修改
2021/03/09 PHP
PHP读取文件或采集时解决中文乱码
2021/03/09 PHP
javaScript 读取和设置文档元素的样式属性
2009/04/14 Javascript
JS判断是否为数字,是否为整数,是否为浮点数的代码
2010/04/24 Javascript
Jquery 绑定时间实现代码
2011/05/03 Javascript
Javascript图像处理—亮度对比度应用案例
2013/01/03 Javascript
jquery实现点击其他区域时隐藏下拉div和遮罩层的方法
2015/12/23 Javascript
KnockoutJS 3.X API 第四章之数据控制流if绑定和ifnot绑定
2016/10/10 Javascript
KnockoutJS 3.X API 第四章之表单textInput、hasFocus、checked绑定
2016/10/11 Javascript
Node.js中出现未捕获异常的处理方法
2020/06/29 Javascript
如何基于viewport vm适配移动端页面
2020/11/13 Javascript
Python函数的周期性执行实现方法
2016/08/13 Python
python字符串string的内置方法实例详解
2018/05/14 Python
python实现傅里叶级数展开的实现
2018/07/21 Python
解决python明明pip安装成功却找不到包的问题
2019/08/28 Python
树莓派4B+opencv4+python 打开摄像头的实现方法
2019/10/18 Python
Pandas实现dataframe和np.array的相互转换
2019/11/30 Python
Python matplotlib绘制图形实例(包括点,曲线,注释和箭头)
2020/04/17 Python
python 实现的IP 存活扫描脚本
2020/12/10 Python
HTML5 CSS3给网站设计带来出色效果
2009/07/16 HTML / CSS
error和exception有什么区别
2012/10/02 面试题
入党思想汇报
2014/01/05 职场文书
安全检查与奖惩制度
2014/01/23 职场文书
领导干部“四风”问题批评与自我批评材料
2014/09/24 职场文书
毕业横幅标语
2014/10/08 职场文书
二手车交易协议书标准版
2014/11/16 职场文书
前台接待员岗位职责
2015/04/15 职场文书
南京南京观后感
2015/06/02 职场文书
MYSQL优化之数据表碎片整理详解
2022/04/03 MySQL