python-nmap在SLES11上似乎有点小问题

来源:互联网 发布:淘宝装修图片 编辑:程序博客网 时间:2024/05/02 01:39

无论适用于python2.x的python-nmap-0.1.4还是适用于python3.x的python-nmap-0.3.4,按照给出的范例,PortScanner在执行scan方法的时候总会在处理finished标签的时候报错。

>>> import nmap>>> nm = nmap.PortScanner()>>> nm.scan('1.2.3.4','21-255,1521,5901,5902')Traceback (most recent call last):  File "<stdin>", line 1, in <module>  File "/usr/local/lib/python3.4/site-packages/nmap/nmap.py", line 302, in scan    nmap_err_keep_trace = nmap_err_keep_trace)  File "/usr/local/lib/python3.4/site-packages/nmap/nmap.py", line 369, in analyse_nmap_xml_scan    'elapsed':dom.getElementsByTagName("finished")[0].getAttributeNode('elapsed').value,AttributeError: 'NoneType' object has no attribute 'value'>>>


以python3为例,如果把369行屏蔽,不处理elapsed属性,那么后面的执行就会完全正常,只是扫描耗时没有记录了(事实上后面发现调用nmap获得的信息里间接有这个信息,只是不以“finished标签的elapsed属性”这个形式,而是通过起止时间间接给出的)。

读了一下nmap.py,发现scan方法调用了自身的analyse_nmap_xml_scan方法,于是修改analyse_nmap_xml_scan方法,直接把解析的dom对象返回,于是scan方法也返回了该对象,调用dom的toxml()方法,结果当中就根本没有“elapsed”这个词。

SLES11SP3环境,nmap版本是4.75。后来换了个CentOS7的环境,nmap-6.40,发现就一切正常了。看来后来的某个nmap版本开始,把elapsed这一项以属性的形式直接返回了。


0 0
原创粉丝点击