โทร python-nmap PortScanner() ไม่พบ nmap

ใน virtualenv ของฉันฉันติดตั้ง python-nmap และติดตั้ง nmap แล้ว (OS X) แต่ถ้าฉันเรียก mmap เช่น (เปิดใช้งาน virtualenv...):

import sys
sys.path.append('/usr/local/bin')

import nmap
nm = nmap.PortScanner()

ฉันได้รับข้อผิดพลาดต่อไปนี้:

Raise PortScannerError ('ไม่พบโปรแกรม nmap ในเส้นทาง')

nmap.nmap.PortScannerError: 'ไม่พบโปรแกรม nmap ในเส้นทาง'

ยังมีวิธีอื่นในการเข้าสู่เส้นทางไปยัง nmap หรือไม่?


person user2883656    schedule 04.04.2014    source แหล่งที่มา


คำตอบ (4)


sys.path ควบคุมตำแหน่งที่ล่าม Python ค้นหาสำหรับการนำเข้าโมดูล "เส้นทาง" ในข้อผิดพลาดของคุณคือตัวแปรสภาพแวดล้อม PATH ของระบบปฏิบัติการ ซึ่งบอกระบบปฏิบัติการว่าจะค้นหา Nmap ได้ที่ไหน คุณสามารถตั้งค่านี้ได้โดยตรงด้วย os.putenv หรือคุณสามารถส่งผ่าน เส้นทางแบบเต็มไปยังไบนารี nmap ในตัวสร้าง nmap.PortScanner:

nm = nmap.PortScanner('/usr/local/bin/nmap')
person bonsaiviking    schedule 05.04.2014
comment
nm = nmap.PortScanner('/usr/local/bin/nmap') ส่งคืน: __init__() รับ 1 อาร์กิวเมนต์ (ให้ 2 รายการ) - person user2883656; 05.04.2014
comment
@ user2883656 ฉันอาจดูแพ็คเกจ python-nmap เวอร์ชันใหม่กว่าซึ่งรองรับไวยากรณ์นี้ - person bonsaiviking; 06.04.2014
comment
คุณใช้เวอร์ชันไหน? ฉันใช้ 0.1.4 เพราะ 0.3.3 รองรับเฉพาะ Python 3 แต่ฉันเปลี่ยนโปรเจ็กต์เป็น Python 3 และจะรายงาน - person user2883656; 06.04.2014
comment
@ user2883656 หากคุณต้องการรองรับ python 2 คุณอาจต้องการตรวจสอบ github.com/savon- noir/python-libnmap (ไม่ใช่การรับรอง ฉันไม่ได้ใช้) - person bonsaiviking; 06.04.2014

ย้ายโปรเจ็กต์เป็น Python 3 และอัปเดต nmap เป็น 0.3.3 ตอนนี้ใช้งานได้แล้ว

ขอบคุณมาก!

person user2883656    schedule 06.04.2014

ติดตั้ง nmap ด้วย homebrew

brew install nmap

จากนั้นการติดตั้งของคุณจะทำงานได้อย่างถูกต้อง

person Daniel Lee    schedule 11.01.2017

ฉันได้ลองวิธีการเหล่านี้แล้วแต่ไม่ได้ผล จากนั้นจึงตรวจสอบเพิ่มเติม

ข้อผิดพลาด:

>>> 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 แรกไม่ทำงาน ดังนั้นฉันจึงเปลี่ยนสิ่งนี้:

จาก :

regex = re.compile('Nmap version [0-9]*\.[0-9]*[^ ]* \( http://nmap\.org \)')

to:

regex = re.compile('Nmap version [0-9]*\.[0-9]*)

ตอนนี้มันทำงานเหมือนกับที่มันควรจะทำงาน!

person asmudeen    schedule 04.02.2018