Pyinstaller: AttributeError: the 'module' object does not have the 'RSA' attribute

My python file works directly with python directly:

python detectIPConflict.py 

However, when the script is packed by PyInstaller:

 pyinstaller --onefile detectIPConflict.py ./dist/detectIPConflict 

Here goes the error:

 WARNING: No route found for IPv6 destination :: (no default route?) Traceback (most recent call last): File "<string>", line 3, in <module> File "/usr/local/lib/python2.7/dist-packages/PyInstaller-3.1.1-py2.7.egg/PyInstaller/loader/pyimod03_importers.py", line 389, in load_module exec(bytecode, module.__dict__) File "scapy/all.py", line 46, in <module> File "/usr/local/lib/python2.7/dist-packages/PyInstaller-3.1.1-py2.7.egg/PyInstaller/loader/pyimod03_importers.py", line 389, in load_module exec(bytecode, module.__dict__) File "scapy/crypto/__init__.py", line 17, in <module> File "/usr/local/lib/python2.7/dist-packages/PyInstaller-3.1.1-py2.7.egg/PyInstaller/loader/pyimod03_importers.py", line 389, in load_module exec(bytecode, module.__dict__) File "scapy/crypto/cert.py", line 19, in <module> AttributeError: 'module' object has no attribute 'RSA' detectIPConflict returned -1 

I am also looking in scapy / crypto / cert.py on line 19:

 from Crypto.PublicKey import * 

I can not find the cause of this error. I'm confused.

Who can help?

Version Information:

  • Python: 2.7.6
  • pyinstaller: 3.1.1
  • scapy: 2.3.2 (installed by the pip command)
  • pycrypto: 2.6.1

Here is detectIPConflict.py:

 #!/usr/bin/env python # -*- coding:utf-8 -*- from scapy.all import * def ip_conflict(): ipscan='10.2.86.190/23' ip_dict = dict() ip_me = get_if_addr('eth0') mac_me = get_if_hwaddr('eth0') print "--------IP ME---------" print ip_me, "--", mac_me print "----------------------" ip_dict[ip_me] = mac_me try: ans,unans=srp(Ether(dst="FF:FF:FF:FF:FF:FF")/ARP(pdst=ipscan),iface="br0", timeout=2,verbose=False) except Exception,e: print str(e) else: print (" MAC -- IP ") for snd,rcv in ans: list_mac=rcv.sprintf("%Ether.src% -- %ARP.psrc%") mac = rcv.sprintf("%Ether.src%") ip = rcv.sprintf("%ARP.psrc%") # print mac,'-->',ip if ip not in ip_dict: ip_dict[ip] = mac for has_ip in ip_dict.keys(): print has_ip, "------ " + ip_dict[has_ip] if __name__ == "__main__": ip_conflict() 
+5
source share
1 answer

I fixed this error by changing the python2.7 / dist-packages / scapy / crypto / cert.py code: Change line 19,20,21:

 from Crypto.PublicKey import RSA from Crypto.Cipher import ARC2 from Crypto.Hash import MD2 

This works for me.

However, I do not know why "import *" cannot be recognized by pyinstaller. Thank you for any explanation.

+3
source

Source: https://habr.com/ru/post/1243302/


All Articles