Python實現(xiàn)一個轉(zhuǎn)存純真IP數(shù)據(jù)庫的腳本分享
前言
之前寫過很多關于掃描腳本的文章,一直都沒寫自己的掃描IP段是哪里搞來的,也會有朋友經(jīng)常來問一些掃描經(jīng)驗,說實話我覺得這個工具并沒有實際的技術含量,但是能提高工作效率,就共享出來給大家耍耍~
談到掃描經(jīng)驗,我個人通常都會針對不同的設備,不同的應用選擇不同類型的段。
比如我現(xiàn)在掃描的目標是一款電信光貓,那自然是選擇電信的IP段,光貓一般是家庭用戶,我們篩選下家庭用戶的活躍IP段,這樣我們就有針對性了。
再比如我現(xiàn)在想掃一款企業(yè)路由設備,那么我就可以選擇企業(yè)公司多的段。
純真IP真心是個不錯的工具,我通常用來檢索某個地區(qū)的IP段,但是這個工具有個非常致命的缺點,就是不能聯(lián)合查詢,而且這玩意每次用都要切換到win下面操作,對于我這種Linux來說自然是無法忍,索性寫個把純真IP轉(zhuǎn)存到mysql數(shù)據(jù)庫的腳本,這樣不用每次查詢都去win下面,還可以直接部署到遠程,查詢方便了很多,最主要的還是支持多條件查詢。
需求
Python寫這個腳本技術上難度不大,主要還是用到了MySQLdb庫,關于MySQLdb庫的安裝就不多說了,博客之前有寫相關的文章。這里咱們需要先分析下純真IP數(shù)據(jù)庫的數(shù)據(jù)文件結(jié)構(gòu),發(fā)現(xiàn)其實每一行的結(jié)構(gòu)都是固定的,那么寫起來就簡單了。
編碼這塊我就不詳細說了,簡單幾個方法就能輕松實現(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ù)庫導出的txt文件并不是標準的無BOM UTF8編碼,直接解析肯定是失敗的,建議使用Notepad++先轉(zhuǎn)碼一下
效果
原始數(shù)據(jù)
轉(zhuǎn)存之后的數(shù)據(jù)
使用
首先需要導出純真ip數(shù)據(jù)庫為txt文檔,這里我導出為ip.txt
然后放到Py腳本同一目錄
對了,首先你還得有mysql數(shù)據(jù)庫
然后導入數(shù)據(jù)庫結(jié)構(gòu),就是那個sql文件
接著你還得修改腳本里面的mysql連接密碼等
最后執(zhí)行Py腳本就好了
說明
所有代碼都托管在Github
地址 https://github.com/kbdancer/myTools/tree/master/czip2mysql
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。
相關文章
安裝Keras,tensorflow,并實現(xiàn)將虛擬環(huán)境添加到jupyter?notebook
這篇文章主要介紹了安裝Keras,tensorflow,并實現(xiàn)將虛擬環(huán)境添加到jupyter?notebook,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-03-03python3整數(shù)反轉(zhuǎn)的實現(xiàn)方法
這篇文章主要介紹了python3整數(shù)反轉(zhuǎn)的實現(xiàn)方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2021-04-04