Panggil python-nmap PortScanner(), nmap tidak ditemukan

Di virtualenv saya, saya menginstal python-nmap dan nmap diinstal (OS X). Tetapi jika saya memanggil mmap seperti (virtualenv diaktifkan...):

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

import nmap
nm = nmap.PortScanner()

Saya mendapatkan kesalahan berikut:

Naikkan PortScannerError('program nmap tidak ditemukan di jalur')

nmap.nmap.PortScannerError: 'program nmap tidak ditemukan di jalur'

Apakah masih ada cara lain untuk masuk ke jalur nmap?


person user2883656    schedule 04.04.2014    source sumber


Jawaban (4)


sys.path mengatur tempat penerjemah Python mencari modul yang diimpor. "Jalur" dalam kesalahan Anda adalah variabel lingkungan PATH OS, yang memberi tahu OS di mana harus mencari Nmap. Anda dapat menyetelnya secara langsung dengan os.putenv atau Anda dapat meneruskannya jalur lengkap ke biner nmap di konstruktor nmap.PortScanner:

nm = nmap.PortScanner('/usr/local/bin/nmap')
person bonsaiviking    schedule 05.04.2014
comment
nm = nmap.PortScanner('/usr/local/bin/nmap') mengembalikan: __init__() mengambil tepat 1 argumen (2 diberikan) - person user2883656; 05.04.2014
comment
@ user2883656 Saya mungkin sedang melihat versi terbaru dari paket python-nmap yang mendukung sintaksis ini. - person bonsaiviking; 06.04.2014
comment
Versi mana yang Anda gunakan? Saya menggunakan 0.1.4, karena 0.3.3 hanya mendukung Python 3. Tapi saya mengubah proyek ke Python 3 dan akan melaporkan. - person user2883656; 06.04.2014
comment
@ user2883656 Jika Anda perlu mendukung python 2, Anda mungkin ingin memeriksa github.com/savon- noir/python-libnmap (bukan dukungan, saya belum menggunakannya) - person bonsaiviking; 06.04.2014

Portet proyek ke Python 3 dan perbarui nmap ke 0.3.3 sekarang berfungsi.

Terima kasih banyak!

person user2883656    schedule 06.04.2014

instal nmap dengan homebrew

brew install nmap

Maka instalasi Anda akan berfungsi dengan benar.

person Daniel Lee    schedule 11.01.2017

Saya telah mencoba metode ini tetapi tidak berhasil, lalu saya memeriksanya lebih lanjut.

Kesalahan:

>>> 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'

jadi saya mencari file "/usr/local/lib/python2.7/dist-packages/nmap/nmap.py". Kode yang mereka periksa untuk nmap tidak berfungsi karena beberapa alasan.

kode:

# 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')

Saya menemukan bahwa regex pertama tidak berfungsi jadi saya mengubahnya:

dari :

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

to:

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

Sekarang ini berfungsi sebagaimana seharusnya!

person asmudeen    schedule 04.02.2018