资产扫描优化---nmap扫描进度

  • 资产扫描优化—nmap扫描进度
    • 进度条:
    • key point:
    • 参考:


资产扫描优化—nmap扫描进度

原来的nmap扫描用的是python-nmap模块写的,它的好处是结果显示非常友好,是json格式的,方便处理入库。

但是在由于扫描大的网段,或者参数设置不合理的时候,整个扫描过程会很慢,所以有了新的需求:提供任务进度的显示。


进度条:

How does NMap decide to print a progress line?

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~这种方法结合了两个模块的优点,并实现了需求。


参考:

  • Nmap扫描原理与用法(上)
  • Nmap扫描原理与用法
  • nmap命令详解
  • python-nmap与python-libnmap对比
  • python-libnmap

你可能感兴趣的:(python,安全开发)