Mac Ventura系统下Nmap程序未在路径中找到,如何解决?
解决Python调用nmap提示“Nmap program was not found in path”的问题
核心原因
系统未安装nmap,或者nmap的可执行文件路径不在当前的PATH环境变量中。
分步解决
1. 检查是否安装了nmap
打开终端,输入以下命令:
nmap -v
如果终端提示command not found,说明还没装nmap,直接跳到步骤2;如果能显示nmap版本信息,说明已安装,跳到步骤3。
2. 安装nmap
Mac上最方便的是用Homebrew安装:
- 先确认有没有Homebrew,终端输
brew -v,没装的话执行:/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)" - 安装nmap:
brew install nmap
3. 将nmap路径加入PATH
如果已经装了nmap但还是报错,先找nmap的位置:
which nmap
会输出类似/usr/local/bin/nmap(Intel芯片Mac)或/opt/homebrew/bin/nmap(M系列芯片Mac)。
然后把这个路径所在的bin目录加入PATH:
- 编辑shell配置文件(Mac Ventura默认用zsh,编辑
~/.zshrc):open -e ~/.zshrc - 在文件末尾添加一行(把路径换成你刚才
which nmap得到的目录):export PATH="$PATH:/opt/homebrew/bin" - 保存文件后,终端执行以下命令让配置生效:
source ~/.zshrc
额外代码优化建议
你的代码里定义了port_range变量但没实际使用,反而循环扫描0-65535全端口,效率极低还容易触发大量异常。可以改成用nmap原生的端口范围扫描,代码调整如下:
import nmap # 使用上下文管理器打开存储IP地址的文件 with open('devices_file') as f: devices_list = f.read().splitlines() # 用户输入要扫描的端口范围 port_range = input("请输入'x-x'格式的端口范围 ") nm = nmap.PortScanner() for device in devices_list: print(f"正在检查 {device}") try: # 直接用nmap扫描整个端口范围,比自己循环高效 result = nm.scan(device, port_range) # 遍历扫描到的端口状态 for port in result['scan'][device]['tcp']: port_status = result['scan'][device]['tcp'][port]['state'] print(f"端口 {port} 状态为 {port_status}") except Exception as e: print(f"扫描设备 {device} 时出错: {str(e)}")
内容的提问来源于stack exchange,提问作者Oscill
相关产品推荐
相关产品推荐

