使用python-nmap扫描192.168.10.1/24网段触发PortScannerError问题
问题背景
使用Python 3.9.2、Nmap 7.80及python-nmap 0.7.1工具,执行以下代码扫描192.168.10.1/24网段时触发PortScannerError:
import nmap nm = nmap.PortScanner() result = nm.scan(hosts = '192.168.10.1/24') print(result)
错误信息如下:
Traceback (most recent call last): File "/usr/local/lib/python3.9/dist-packages/nmap/nmap.py", line 369, in analyse_nmap_xml_scan dom = ET.fromstring(self._nmap_last_output) File "/usr/lib/python3.9/xml/etree/ElementTree.py", line 1348, in XML return parser.close() xml.etree.ElementTree.ParseError: no element found: line 7, column 0 During handling of the above exception, another exception occurred: Traceback (most recent call last): File "/home/fypgroup02/Documents/test.py", line 4, in <module> result = nm.scan(hosts = '192.168.10.1/24') File "/usr/local/lib/python3.9/dist-packages/nmap/nmap.py", line 306, in scan return self.analyse_nmap_xml_scan( File "/usr/local/lib/python3.9/dist-packages/nmap/nmap.py", line 372, in analyse_nmap_xml_scan raise PortScannerError(nmap_err) nmap.nmap.PortScannerError: "nmap: Target.cc:503: void Target::stopTimeOutClock(const timeval*): Assertion `htn.toclock_running == true' failed.\n"
但扫描192.168.10.1-10小范围网段时可正常运行,询问大网段扫描失败的原因及解决办法。
原因分析
- Nmap 7.80版本BUG:该版本存在已知的并发处理漏洞,当扫描大规模网段(如/24)时,目标超时时钟的管理逻辑触发断言失败。小范围网段因目标数量少,未触发该漏洞。
- 资源过载:/24网段包含254个目标,扫描时会占用大量CPU、内存和网络资源,若系统资源不足,Nmap进程可能异常终止,无法生成完整的XML输出,导致python-nmap解析失败。
- 版本兼容性问题:python-nmap 0.7.1与Nmap 7.80的XML输出格式存在兼容性差异,大规模扫描时输出的XML结构不完整或不符合预期,引发解析错误。
解决办法
- 升级Nmap:将Nmap更新至7.90及以上版本,官方已修复该断言失败的BUG。
- 控制扫描并发数:在
scan方法中添加参数限制并发目标数量,避免资源过载:result = nm.scan(hosts='192.168.10.1/24', arguments='--max-parallelism 20') - 拆分网段分批扫描:将/24网段拆分为多个小范围(如
192.168.10.1-64、192.168.10.65-128等),分批次执行扫描后合并结果。 - 更新python-nmap:升级python-nmap到最新稳定版本(如0.7.4),提升与新版Nmap的兼容性。
内容的提问来源于stack exchange,提问作者wallace wong
相关产品推荐
相关产品推荐

