您的位置:首页 > 编程语言 > Python开发

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

2015-02-13 15:14 225 查看
无论适用于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这一项以属性的形式直接返回了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: