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 相关文章推荐
用Python遍历C盘dll文件的方法
May 06 Python
python实现简单神经网络算法
Mar 10 Python
python:pandas合并csv文件的方法(图书数据集成)
Apr 12 Python
浅谈tensorflow中几个随机函数的用法
Jul 27 Python
Python运维自动化之nginx配置文件对比操作示例
Aug 29 Python
python实现定时发送qq消息
Jan 18 Python
python实现多层感知器MLP(基于双月数据集)
Jan 18 Python
对python dataframe逻辑取值的方法详解
Jan 30 Python
python批量图片处理简单示例
Aug 06 Python
python实现指定ip端口扫描方式
Dec 17 Python
pytorch 图像预处理之减去均值,除以方差的实例
Jan 02 Python
Python3通过chmod修改目录或文件权限的方法示例
Jun 08 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
解析thinkphp中的导入文件标签
2013/06/20 PHP
PHP设计模式之工厂模式实例总结
2017/09/01 PHP
php设计模式之中介者模式分析【星际争霸游戏案例】
2020/03/23 PHP
TNC vs BOOM BO3 第二场2.13
2021/03/10 DOTA
JavaScript类和继承 prototype属性
2010/09/03 Javascript
javascript实现div的拖动并调整大小类似qq空间个性编辑模块
2012/12/12 Javascript
jquery简单的拖动效果实现原理及示例
2013/07/26 Javascript
Js获取下拉框选定项的值和文本的实现代码
2014/02/26 Javascript
技术男用来对妹子表白的百度首页
2014/07/23 Javascript
解决JS组件bootstrap table分页实现过程中遇到的问题
2016/04/21 Javascript
jQuery ajax全局函数处理session过期后的ajax跳转问题
2016/06/03 Javascript
基于node.js express mvc轻量级框架实践
2017/09/14 Javascript
Vue-router路由判断页面未登录跳转到登录页面的实例
2017/10/26 Javascript
vue路由传参页面刷新参数丢失问题解决方案
2019/10/08 Javascript
Vue使用预渲染代替SSR的方法
2020/07/02 Javascript
vue 解决data中定义图片相对路径页面不显示的问题
2020/08/13 Javascript
Vuejs通过拖动改变元素宽度实现自适应
2020/09/02 Javascript
[14:03]2017DOTA2亚洲邀请赛开幕式:12神兵演绎水墨中华
2017/04/01 DOTA
python判断设备是否联网的方法
2018/06/29 Python
python实现大转盘抽奖效果
2019/01/22 Python
Pyinstaller打包.py生成.exe的方法和报错总结
2019/04/02 Python
使用python3调用wxpy模块监控linux日志并定时发送消息给群组或好友
2019/06/05 Python
pycharm创建scrapy项目教程及遇到的坑解析
2019/08/15 Python
Python提取PDF内容的方法(文本、图像、线条等)
2019/09/25 Python
html5教程画矩形代码分享
2013/12/04 HTML / CSS
双立人美国官方商店:ZWILLING集团餐具和炊具
2020/05/07 全球购物
可以在一个PHP文件里面include另外一个PHP文件两次吗
2015/05/22 面试题
别名指示符是什么
2012/10/08 面试题
公益广告标语
2014/06/19 职场文书
运动会标语
2014/06/21 职场文书
大一工商管理职业生涯规划:有梦最美,行动相随
2014/09/18 职场文书
2015年百日安全活动总结
2015/03/26 职场文书
MySQL基础(二)
2021/04/05 MySQL
golang switch语句的灵活写法介绍
2021/05/06 Golang
php 文件上传至OSS及删除远程阿里云OSS文件
2021/07/04 PHP
win11怎么用快捷键锁屏? windows11锁屏的几种方法
2021/11/21 数码科技