PyCharm: Unresolved reference with Scapy

Question:

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

Asked By: NIoSaT

||

Answers:

Had the same issue, try importing this way:

from scapy.layers.inet import IP, UDP, wrpcap, Ether

it worked for me.

Answered By: Andreas

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 sockets
  • scapy.layers.l2 which has Ether, ARP..
  • scapy.layers.dot11 for 802.11 stuff
  • scapy.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

Answered By: Cukic0d

The Ether,IP… not defined directly in scapy.all 🙁

Now, PyCharm can give you the advice to import whatever you need from their related scapy file:
enter image description here

Answered By: tinyhare
Categories: questions Tags: , , ,
Answers are sorted by their score. The answer accepted by the question owner as the best is marked with
at the top-right corner.