資產掃描優化---nmap掃描進度
阿新 • • 發佈:2019-01-30
資產掃描優化—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~這種方法結合了兩個模組的優點,並實現了需求。