I am working on a network tool that I write in python using scapy.
As IDE I am using Pycharm.
My Code works. So if I run it, everything works just as intended.
My problem is that PyCharm is giving me some errors.
It marks every use of IP
, TCP
, Ether
, ... as Undefined Reference to ...
The relevant parts of my Code look like this
#!/usr/bin/env python
from scapy.all import *
...
...
syn = IP(src=src_ip, dst=dst_ip) / TCP(sport=src_port, dport=dst_port, seq=src_seq, flags="S")
...
I tried many things I found using google, like adding my src folder as source root, I refreshed all caches I could find and restarted PyCharm dozens of times, but nothing worked...
Since the code works it's a minor problem, but still I'd like to have my IDE working as intended
I am working under MacOS and I use a Virtual Environment
Generally, this is a missing package problem, just place the caret at the unresolved reference and press Alt+Enter to reveal the options, then you should know how to solve it. Install via PyCharm (works with Community Edition).
To fix this: 1 Open PyCharm settings 2 Navigate to Editor -> File Types 3 Find Python and add __init__.py to the list of python files
Normally, $PYTHONPATH is used to teach python interpreter to find necessary modules. PyCharm needs to add the path in Preference. Show activity on this post. Generally, this is a missing package problem, just place the caret at the unresolved reference and press Alt+Enter to reveal the options, then you should know how to solve it.
The project I cloned had a directory called modules and was successfully using files from there in the code with import this as that, but Pycharm was unable to jump to those code fragments because it did not recognise the imports. Marking the module folder in the following settings section as source solved the issue. Show activity on this post.
Had the same issue, try importing this way:
from scapy.layers.inet import IP, UDP, wrpcap, Ether
it worked for me.
This is a PyCharm issue. Scapy uses dynamic loading (using importlib
) to load many modules / custom modules, that pycharm does not detect. This allows the users to select which layers they want to have loaded.
The workaround is to import whatever you need from their related scapy file, without using all
. It is cleaner but longer to do. Or you can use "add an exception" in your IDE, if you’re not looking for something clean.
Here are a few useful modules
scapy.layers.inet
where you can get IP, TCP..scapy.layers.inet6
scapy.layers.dns
scapy.sendrecv
has srp, sr, sr1, sendp, send...scapy.supersocket
to directly access scapy’s socketsscapy.layers.l2
which has Ether, ARP..scapy.layers.dot11
for 802.11 stuffscapy.utils
for wrpcap
, rdpcap
...scapy.config
for the conf
object (which has properties such as conf.route
or conf.route6
)What I advise to do is to open the Scapy shell (or import from scapy.all import *
in a console) and check from which module a layer/function is by using help(...)
. You can also check out the online API reference (it has a search bar) over here
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With