Python實(shí)現(xiàn)一個(gè)轉(zhuǎn)存純真IP數(shù)據(jù)庫的腳本分享
前言
之前寫過很多關(guān)于掃描腳本的文章,一直都沒寫自己的掃描IP段是哪里搞來的,也會(huì)有朋友經(jīng)常來問一些掃描經(jīng)驗(yàn),說實(shí)話我覺得這個(gè)工具并沒有實(shí)際的技術(shù)含量,但是能提高工作效率,就共享出來給大家耍耍~
談到掃描經(jīng)驗(yàn),我個(gè)人通常都會(huì)針對(duì)不同的設(shè)備,不同的應(yīng)用選擇不同類型的段。
比如我現(xiàn)在掃描的目標(biāo)是一款電信光貓,那自然是選擇電信的IP段,光貓一般是家庭用戶,我們篩選下家庭用戶的活躍IP段,這樣我們就有針對(duì)性了。
再比如我現(xiàn)在想掃一款企業(yè)路由設(shè)備,那么我就可以選擇企業(yè)公司多的段。
純真IP真心是個(gè)不錯(cuò)的工具,我通常用來檢索某個(gè)地區(qū)的IP段,但是這個(gè)工具有個(gè)非常致命的缺點(diǎn),就是不能聯(lián)合查詢,而且這玩意每次用都要切換到win下面操作,對(duì)于我這種Linux來說自然是無法忍,索性寫個(gè)把純真IP轉(zhuǎn)存到mysql數(shù)據(jù)庫的腳本,這樣不用每次查詢都去win下面,還可以直接部署到遠(yuǎn)程,查詢方便了很多,最主要的還是支持多條件查詢。
需求
Python寫這個(gè)腳本技術(shù)上難度不大,主要還是用到了MySQLdb庫,關(guān)于MySQLdb庫的安裝就不多說了,博客之前有寫相關(guān)的文章。這里咱們需要先分析下純真IP數(shù)據(jù)庫的數(shù)據(jù)文件結(jié)構(gòu),發(fā)現(xiàn)其實(shí)每一行的結(jié)構(gòu)都是固定的,那么寫起來就簡單了。
編碼這塊我就不詳細(xì)說了,簡單幾個(gè)方法就能輕松實(shí)現(xiàn),貼出來代碼
#!/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.'注意
由于純真IP數(shù)據(jù)庫導(dǎo)出的txt文件并不是標(biāo)準(zhǔn)的無BOM UTF8編碼,直接解析肯定是失敗的,建議使用Notepad++先轉(zhuǎn)碼一下
效果
原始數(shù)據(jù)

轉(zhuǎn)存之后的數(shù)據(jù)

使用
首先需要導(dǎo)出純真ip數(shù)據(jù)庫為txt文檔,這里我導(dǎo)出為ip.txt
然后放到Py腳本同一目錄
對(duì)了,首先你還得有mysql數(shù)據(jù)庫
然后導(dǎo)入數(shù)據(jù)庫結(jié)構(gòu),就是那個(gè)sql文件
接著你還得修改腳本里面的mysql連接密碼等
最后執(zhí)行Py腳本就好了
說明
所有代碼都托管在Github
地址 https://github.com/kbdancer/myTools/tree/master/czip2mysql
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對(duì)腳本之家的支持。
相關(guān)文章
python解析發(fā)往本機(jī)的數(shù)據(jù)包示例 (解析數(shù)據(jù)包)
這篇文章主要介紹了使用python解析獲取發(fā)往本機(jī)的數(shù)據(jù)包,并打印出來, 大家參考使用吧2014-01-01
Python環(huán)境搭建過程從安裝到Hello World
這篇文章主要介紹了Python環(huán)境搭建過程從安裝到Hello World,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-02-02
pyinstaller打包可執(zhí)行文件,存放路徑包含中文無法運(yùn)行的解決方案
這篇文章主要介紹了pyinstaller打包可執(zhí)行文件,存放路徑包含中文無法運(yùn)行的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2021-03-03
Python中使用?zipfile創(chuàng)建文件壓縮工具
這篇文章主要介紹了Python中使用zipfile創(chuàng)建文件壓縮工具,通過使用 wxPython 模塊,我們創(chuàng)建了一個(gè)簡單而實(shí)用的文件壓縮工具,本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的ca參考借鑒價(jià)值,需要的朋友可以參考下2023-09-09
Pandas在數(shù)據(jù)分析和機(jī)器學(xué)習(xí)中的應(yīng)用及優(yōu)勢
Pandas是Python中用于數(shù)據(jù)處理和數(shù)據(jù)分析的庫,它提供了靈活的數(shù)據(jù)結(jié)構(gòu)和數(shù)據(jù)操作工具,包括Series和DataFrame等。Pandas還支持大量數(shù)據(jù)操作和數(shù)據(jù)分析功能,包括數(shù)據(jù)清洗、轉(zhuǎn)換、篩選、聚合、透視表、時(shí)間序列分析等2023-04-04
Python?常用內(nèi)置模塊超詳細(xì)梳理總結(jié)
模塊是一個(gè)包含索引你定義的函數(shù)和變量的文件,其擴(kuò)展名為.py。模塊可以被其他程序引入,以使用該模塊中的函數(shù)等功能。這也是使用python標(biāo)準(zhǔn)庫的方法2022-03-03
Pycharm 實(shí)現(xiàn)下一個(gè)文件引用另外一個(gè)文件的方法
今天小編就為大家分享一篇Pycharm 實(shí)現(xiàn)下一個(gè)文件引用另外一個(gè)文件的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2019-01-01
Python實(shí)現(xiàn)微信高效自動(dòng)化操作
在如今數(shù)字化時(shí)代,人們對(duì)于效率的追求越來越強(qiáng)烈,而PyAutoGUI和Pyperclip作為Python中的兩個(gè)強(qiáng)大庫,為我們實(shí)現(xiàn)自動(dòng)化操作提供了便利,下面我們就來看看如何利用這兩個(gè)庫實(shí)現(xiàn)微信自動(dòng)化操作吧2023-10-10

