1. 程式人生 > >資產掃描優化---nmap掃描進度

資產掃描優化---nmap掃描進度

資產掃描優化—nmap掃描進度

原來的nmap掃描用的是python-nmap模組寫的,它的好處是結果顯示非常友好,是json格式的,方便處理入庫。

但是在由於掃描大的網段,或者引數設定不合理的時候,整個掃描過程會很慢,所以有了新的需求:提供任務進度的顯示。

進度條:

libnmap相比nmap模組來說,libnmap的實現更加龐大,不只是單單呼叫nmap,還對nmap中的互動物件進行了類定義,從外掛模組可以看出,該庫還試圖通過外掛來不斷豐富自己功能。

最主要的是libnmap模組當中提供了顯示進度的百分比,這對於檢視任務是非常友好的。

具體實現顯示進度的過程中,libnmap包會用到thread

To go a bit further, you can always use the threading capabilities of the NmapProcess class and run the class in the background

顯示進度的官方文件的例子:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

from libnmap.process import NmapProcess
from time import sleep


nmap_proc = NmapProcess(targets="scanme.nmap.org"
, options="-sT") nmap_proc.run_background() while nmap_proc.is_running(): print("Nmap Scan running: ETC: {0} DONE: {1}%".format(nmap_proc.etc, nmap_proc.progress)) sleep(2) print("rc: {0} output: {1}".format(nmap_proc.rc, nmap_proc.summary
))

key point:

關鍵問題來了,

  • libnmap提供進度,但是結果顯示不友好,解析函式用起來不方便
  • nmap模組沒有進度,但是結果輸出友好,json格式的

怎麼結合這2個使用呢?

  • 使用libnmap模組進行掃描
  • 結果使用nmap模組中的analyse_nmap_xml_scan函式進行解析

例子:

from libnmap.process import NmapProcess

nmap_proc = NmapProcess(targets=str(target), options=args)
nmap_proc.run_background()
while nmap_proc.is_running():
    print("[*] Nmap Scan running: DONE: {0}%".format(float(nmap_proc.progress)))
    time.sleep(2) # 兩秒更新一次百分比

ScanEngine = nmap.PortScanner()
ScanEngine.analyse_nmap_xml_scan(nmap_proc.stdout) # 用nmap模組來解析結果

perfect~這種方法結合了兩個模組的優點,並實現了需求。

參考: