国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

Python實現一個轉存純真IP數據庫的腳本分享

2020-01-04 17:11:58
字體:
來源:轉載
供稿:網友

前言

之前寫過很多關于掃描腳本的文章,一直都沒寫自己的掃描IP段是哪里搞來的,也會有朋友經常來問一些掃描經驗,說實話我覺得這個工具并沒有實際的技術含量,但是能提高工作效率,就共享出來給大家耍耍~

談到掃描經驗,我個人通常都會針對不同的設備,不同的應用選擇不同類型的段。

比如我現在掃描的目標是一款電信光貓,那自然是選擇電信的IP段,光貓一般是家庭用戶,我們篩選下家庭用戶的活躍IP段,這樣我們就有針對性了。

再比如我現在想掃一款企業路由設備,那么我就可以選擇企業公司多的段。

純真IP真心是個不錯的工具,我通常用來檢索某個地區的IP段,但是這個工具有個非常致命的缺點,就是不能聯合查詢,這就令人非常蛋疼了,而且這玩意每次用都要切換到win下面操作,對于我這種Linux黨來說自然是無法忍,索性寫個把純真IP轉存到mysql數據庫的腳本,這樣不用每次查詢都去win下面,還可以直接部署到遠程,查詢方便了很多,最主要的還是支持多條件查詢。

需求

Python寫這個腳本技術上難度不大,主要還是用到了MySQLdb庫,關于MySQLdb庫的安裝就不多說了,博客之前有寫相關的文章。這里咱們需要先分析下純真IP數據庫的數據文件結構,發現其實每一行的結構都是固定的,那么寫起來就簡單了。

編碼這塊我就不詳細說了,簡單幾個方法就能輕松實現,貼出來代碼

#!/usr/bin/env python# coding=utf-8# kbdancer@92ez.comimport MySQLdbimport sysreload(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 edef 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 eclass 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++先轉碼一下

效果

原始數據

純真ip數據庫,純真ip,python,數據庫腳本

轉存之后的數據

純真ip數據庫,純真ip,python,數據庫腳本

使用

首先需要導出純真ip數據庫為txt文檔,這里我導出為ip.txt

然后放到Py腳本同一目錄

對了,首先你還得有mysql數據庫

然后導入數據庫結構,就是那個sql文件

接著你還得修改腳本里面的mysql連接密碼等

最后執行Py腳本就好了

說明

所有代碼都托管在Github

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

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作能帶來一定的幫助,如果有疑問大家可以留言交流,謝謝大家對VEVB武林網的支持。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 象山县| 珲春市| 定结县| 正宁县| 长海县| 天台县| 霍城县| 陇南市| 河北区| 鄂伦春自治旗| 大兴区| 鄂托克前旗| 若羌县| 张家港市| 漾濞| 双峰县| 宁强县| 含山县| 山丹县| 塘沽区| 大安市| 金湖县| 溧水县| 琼海市| 永德县| 政和县| 清新县| 二手房| 建平县| 密云县| 广河县| 泾川县| 大英县| 松江区| 蒲城县| 富顺县| 棋牌| 玛多县| 崇明县| SHOW| 诸城市|