2

For some reason I can't use nmap on python. I have python-nmap installed as a library. Whenever I try to use PortScanner(), I get path error but I have nmap installed on my computer and it is even in path.

import nmap

nm = nmap.PortScanner()

print(nm)

The error is

raise PortScannerError(
nmap.nmap.PortScannerError: 'nmap program was not found in path. PATH is : C:\\Program Files (x86)\\Common Files\\Oracle\\Java\\javapath;C:\\Windows\\system32;C:\\Windows;C:\\Windows\\System32\\Wbem;C:\\Windows\\System32\\WindowsPowerShell\\v1.0\\;C:\\Program Files\\Microsoft SQL Server\\130\\Tools\\Binn\\;C:\\nodejs\\;C:\\Program Files\\dotnet\\;C:\\Program Files\\Microsoft SQL Server\\Client SDK\\ODBC\\170\\Tools\\Binn\\;C:\\Program Files (x86)\\dotnet\\;C:\\Users\\Anti\\AppData\\Local\\Programs\\Python\\Python38\\Scripts\\;C:\\Users\\Anti\\AppData\\Local\\Programs\\Python\\Python38\\;C:\\Program Files\\Java\\jdk-13.0.2\\bin;C:\\Users\\Anti\\Desktop\\Selenium;C:\\Users\\Anti\\Desktop\\C++;C:\\ffmpeg\\bin;;C:\\Users\\Anti\\AppData\\Local\\Programs\\Microsoft VS Code\\bin;C:\\MinGW\\bin;C:\\Users\\Anti\\AppData\\Roaming\\npm;C:\\Users\\Anti\\.dotnet\\tools;C:\\Program Files (x86)\\Nmap'

My nmap files are in the path as you can see.

C:\\Program Files (x86)\\Nmap

I tried to reinstall nmap and add in path again, nothing changed. I can use the nmap command directly on cmd without any problems. By the way, I don't use virtualenv. How can I solve this?

Anhedonia
  • 37
  • 1
  • 7

3 Answers3

4

I know this is old thread. But if someone is searching for similar answer.
What @sushanth answered is correct. It just has to be list:

nmap_path = [r"C:\Program Files (x86)\Nmap\nmap.exe",]
scanner = nmap.PortScanner(nmap_search_path=nmap_path)
Jasec
  • 56
  • 2
1

You need to add path for nmap.exe while initializing PortScanner

import nmap

nmap_path = r"C:\Program Files (x86)\Nmap\nmap.exe"
nmap.PortScanner(nmap_search_path = nmap_path)
sushanth
  • 8,275
  • 3
  • 17
  • 28
0

this article helped a lot, because I had the same issue. But there are still some things to be respected:

  • Ensure that nmap_path is a list or a tuple, not a single str.
  • when defining the path, it needs to be noted with a leading dot "."
import nmap # networ scanner "nmap" needs also the nmap tool from https://nmap.org/download

# nmap ping scan
#s_path=(r'C:\Program Files (x86)\Nmap\nmap.exe',r'\Nmap\nmap.exe',r'\nmap-7.92\nmap.exe')
s_path=[r'\Nmap\nmap.exe',r'.\nmap-7.92\nmap.exe']
print(type(s_path))
nm = nmap.PortScanner(nmap_search_path = s_path) # alternative way with seld defined path
#nm = nmap.PortScanner() #standard way, if Nmap tool is installed correct from https://nmap.org/download
nm.scan(hosts="192.168.178.0/24",arguments="-sn")
ip_list=nm.all_hosts() #returns a list with all available IPs
print(ip_list)