Python Forum
Trying to use python-nmap but receiving however python2 or 3 can't find PortScanner.
Thread Rating:
  • 1 Vote(s) - 5 Average
  • 1
  • 2
  • 3
  • 4
  • 5
Trying to use python-nmap but receiving however python2 or 3 can't find PortScanner.
#1
Hi All,

Given this code snippet, could you please help me understand what am I missing?

High level overview:

1) I've imported python-nmap
2) Imported using import nmap
3) Receiving AttributeError: 'function' object has no attribute 'PortScanner'

Details:

#!/bin/python

import sys
import getopt
import nmap

import xml.dom.minidom, xml.etree.ElementTree as et;

def nmap(vlan, netmask):
    # NMAP VLAN to determine IP availability.
    print ("NMAP Scanner")
    nm = nmap.PortScanner ()


def main():
    xmltree = et.parse(sys.argv[1]);

    # XML Tree Item = xti
    for xti in xmltree.iter('AR'):
        network_address = xti.find('NETWORK_ADDRESS').text;
        network_mask = xti.find('NETWORK_MASK').text;

        print ("[*] Network Address: ", network_address);
        print ("[*] Network Mask: ", network_mask);

    nmap(network_address, network_mask)

if __name__ == "__main__":
    main();
But instead, I'm getting:


Error:
[user@server01 nmap]$ ./get_address vlan2.xml ('[*] Network Address: ', '10.0.0.117') ('[*] Network Mask: ', '255.255.255.0') NMAP Scanner Traceback (most recent call last): File "./get_address", line 113, in <module> main(); File "./get_address", line 107, in main nmap(network_address, network_mask) File "./get_address", line 64, in nmap nm = nmap.PortScanner () AttributeError: 'function' object has no attribute 'PortScanner' [user@server01 nmap]$
I do have python-nmap installed:

[root@server01 nmap]# pip freeze|grep -Ei nmap
python-nmap==0.6.1
[root@server01 nmap]#

Since python2 is no longer supported, tried to use python3 but received the same error. My best interpretation of google search results is that python can't see the installed module. But I'm unable to get further then that.

Cheers,
TK
Reply
#2
what you expect when you name your function nmap, same as the imported module thus overridng the module? Just rename your nmap function...
If you can't explain it to a six year old, you don't understand it yourself, Albert Einstein
How to Ask Questions The Smart Way: link and another link
Create MCV example
Debug small programs

Reply
#3
(face palm)

Thanks man. Right, it'll call the local function.

Guess what I was thinking is that it calls a static function on a class and will know that I'm referencing a class static function since I'm using '.' .

I'm just starting with python. Carrying some C++ concepts here. Thank you!

Cheers,
TK
Reply
#4
in python everything is object

def foo():
    pass

foo.bar = 'spam'
print(foo.bar)
print(type(foo))
Output:
spam <class 'function'>
(Jan-19-2020, 02:17 PM)PythonNmap Wrote: will know that I'm referencing a class static function since I'm using '.'

just to make terminology stright - ignoring your function - nmap is package, not class, and PortScanner is a class, so nmap.PortScanner() instantiate object of that class
If you can't explain it to a six year old, you don't understand it yourself, Albert Einstein
How to Ask Questions The Smart Way: link and another link
Create MCV example
Debug small programs

Reply
#5
Hmm, I've changed the function name but same result.

#!/bin/python
 
import sys
import getopt
import nmap
 
import xml.dom.minidom, xml.etree.ElementTree as et;
 
def nmapScan(vlan, netmask):
    # NMAP VLAN to determine IP availability.
    print ("NMAP Scanner")
    nm = nmap.PortScanner ()
 
 
def main():
    xmltree = et.parse(sys.argv[1]);
 
    # XML Tree Item = xti
    for xti in xmltree.iter('AR'):
        network_address = xti.find('NETWORK_ADDRESS').text;
        network_mask = xti.find('NETWORK_MASK').text;
 
        print ("[*] Network Address: ", network_address);
        print ("[*] Network Mask: ", network_mask);
 
    nmapScan(network_address, network_mask)
 
if __name__ == "__main__":
    main();
Error:
$ ./ip-get.py vlan2.xml [*] Network Address: 10.0.0.117 [*] Network Mask: 255.255.255.0 NMAP Scanner Traceback (most recent call last): File "./ip-get.py", line 29, in <module> main(); File "./ip-get.py", line 26, in main nmap(network_address, network_mask) File "./ip-get.py", line 12, in nmap nm = nmap.PortScanner () AttributeError: 'function' object has no attribute 'PortScanner'
Thx,
TK
Reply
#6
did you save the file after the edit? As the traceback show - you still call nmap(network_address, network_mask)
and don't use ; at the end of the line
If you can't explain it to a six year old, you don't understand it yourself, Albert Einstein
How to Ask Questions The Smart Way: link and another link
Create MCV example
Debug small programs

Reply
#7
Ya saw that. Meant to come back and edit that since I had the previous error still stuck in the paste buffer. However, this forum only allows that as long as the post is < 10 minutes old.

Took out ';' as well. Same result.

$ cat ip-get.py
#!/bin/python3

import sys
import getopt
import nmap

import xml.dom.minidom, xml.etree.ElementTree as et

def nmapScan(vlan, netmask):
    # NMAP VLAN to determine IP availability.
    print ("NMAP Scanner")
    nm = nmap.PortScanner ()


def main():
    xmltree = et.parse(sys.argv[1])

    # XML Tree Item = xti
    for xti in xmltree.iter('AR'):
        network_address = xti.find('NETWORK_ADDRESS').text
        network_mask = xti.find('NETWORK_MASK').text

        print ("[*] Network Address: ", network_address)
        print ("[*] Network Mask: ", network_mask)

    nmapScan(network_address, network_mask)

if __name__ == "__main__":
    main();
Error:
$ ./ip-get.py vlan2.xml [*] Network Address: 10.0.0.117 [*] Network Mask: 255.255.255.0 NMAP Scanner Traceback (most recent call last): File "./ip-get.py", line 29, in <module> main(); File "./ip-get.py", line 26, in main nmapScan(network_address, network_mask) File "./ip-get.py", line 12, in nmapScan nm = nmap.PortScanner () AttributeError: module 'nmap' has no attribute 'PortScanner'
Thx,
TK
Reply
#8
no, it's not the same error - now nmap is referenced as module (module 'nmap' has no attribute 'PortScanner') . By any chance do you have another file named nmap.py in the same folder?
If yes - rename/delete it. You import it, not python-nmap package.
If you can't explain it to a six year old, you don't understand it yourself, Albert Einstein
How to Ask Questions The Smart Way: link and another link
Create MCV example
Debug small programs

Reply
#9
Nope. Ran this from the location I'm executing the script from:

Error:
$ ls -altri *nmap* ls: cannot access *nmap*: No such file or directory
Reply
#10
not the folder from where you run the script. the folder where the script is. In any case - that's the problem. it does not import the package, it imports nmap.py from somewhere
at least that is what I think.
Here is the docs on python search path, i.e. where it search and in what order when import
https://docs.python.org/3/tutorial/modul...earch-path
If you can't explain it to a six year old, you don't understand it yourself, Albert Einstein
How to Ask Questions The Smart Way: link and another link
Create MCV example
Debug small programs

Reply


Possibly Related Threads…
Thread Author Replies Views Last Post
  Receiving this error in my "response" and causes script to return wrong status cubangt 18 1,910 Aug-13-2023, 12:16 AM
Last Post: cubangt
  SMA (simple moving avg) Not receiving Data (stock prices). gdbengo 2 1,407 Jul-31-2022, 08:20 PM
Last Post: paulyan
  Receiving snmp traps with more than one Community String ilknurg 0 2,151 Jan-19-2022, 09:02 AM
Last Post: ilknurg
  [Selenium]Timed out receiving message from renderer: 10.000 wood_6636 0 2,564 Jun-26-2020, 08:59 AM
Last Post: wood_6636
  output mismatching when porting a python from python2 env to python3 env prayuktibid 2 2,517 Jan-21-2020, 04:41 AM
Last Post: prayuktibid
  Receiving XML exception from nmap.scan() results. PythonNmap 4 4,034 Jan-21-2020, 04:41 AM
Last Post: PythonNmap
  First Byte of a string is missing while receiving data over TCP Socket shahrukh1987 3 4,168 Nov-20-2019, 10:34 AM
Last Post: shahrukh1987
  Trying to run a python2 script dagamer1991 3 2,485 Aug-12-2019, 12:33 PM
Last Post: buran
  Use nmap inside my python code to get supported cipher suites jimmeh 4 5,160 May-30-2019, 01:07 PM
Last Post: jimmeh
  python2.7 executables thus the system python2.7 was erroring utility.execute()? vivekm 1 1,727 May-20-2019, 11:24 AM
Last Post: vivekm

Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020