在我的virtualenv中,我安装了python-nmap并安装了nmap(OS X)。 但如果我把mmap称为(virtualenv激活...):
import sys
sys.path.append('/usr/local/bin')
import nmap
nm = nmap.PortScanner()
我收到以下错误:
提升PortScannerError(' nmap程序未在路径'中找到)
nmap.nmap.PortScannerError:在路径中找不到' nmap程序'
还有另一种方法可以输入nmap的路径吗?
答案 0 :(得分:1)
将项目移植到Python 3并将nmap更新为0.3.3现在它可以工作。
非常感谢!
答案 1 :(得分:1)
使用自制软件安装nmap
brew install nmap
然后您的安装将正常运行。
答案 2 :(得分:0)
sys.path
管理Python解释器查找导入模块的位置。 "路径"在你的错误中是操作系统的PATH
环境变量,它告诉操作系统在哪里寻找Nmap
。您可以直接使用os.putenv
进行设置,也可以将nmap
二进制文件的完整路径传递给nmap.PortScanner
构造函数:
nm = nmap.PortScanner('/usr/local/bin/nmap')
答案 3 :(得分:0)
我尝试了这些方法但没有奏效,然后我进一步研究了它。
错误:
>>> import nmap
>>> nm = nmap.PortScanner()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/lib/python2.7/dist-packages/nmap/nmap.py", line 137, in __init__
raise PortScannerError('nmap program was not found in path')
nmap.nmap.PortScannerError: 'nmap program was not found in path'
所以我查看了文件“/ usr / local / lib / python2.7 / dist-packages / nmap / nmap.py”。他们检查 nmap 的代码由于某种原因不起作用。
代码:
# regex used to detect nmap
regex = re.compile('Nmap version [0-9]*\.[0-9]*[^ ]* \( http://nmap\.org \)')
# launch 'nmap -V', we wait after 'Nmap version 5.0 ( http://nmap.org )'
p = subprocess.Popen(['nmap', '-V'], bufsize=10000, stdout=subprocess.PIPE)
self._nmap_last_output = p.communicate()[0] # store stdout
for line in self._nmap_last_output.split('\n'):
if regex.match(line) is not None:
is_nmap_found = True
# Search for version number
regex_version = re.compile('[0-9]+')
regex_subversion = re.compile('\.[0-9]+')
rv = regex_version.search(line)
rsv = regex_subversion.search(line)
if rv is not None and rsv is not None:
# extract version/subversion
self._nmap_version_number = int(line[rv.start():rv.end()])
self._nmap_subversion_number = int(line[rsv.start()+1:rsv.end()])
break
if is_nmap_found == False:
raise PortScannerError('nmap program was not found in path')
我发现第一个正则表达式无效,所以我改变了这个:
来自:
regex = re.compile('Nmap version [0-9]*\.[0-9]*[^ ]* \( http://nmap\.org \)')
为:
regex = re.compile('Nmap version [0-9]*\.[0-9]*)
现在它的工作就像它想要工作一样!