Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

PyCharm: Unresolved reference with Scapy

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

like image 458
NIoSaT Avatar asked Aug 15 '17 11:08

NIoSaT


People also ask

How to solve unresolved references in PyCharm?

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).

How to fix PyCharm not responding in Python?

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

What is $pythonpath in PyCharm?

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.

Why can't PyCharm jump to imported code fragments?

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.


2 Answers

Had the same issue, try importing this way:

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

it worked for me.

like image 192
Andreas Avatar answered Oct 07 '22 02:10

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

like image 30
Cukic0d Avatar answered Oct 07 '22 03:10

Cukic0d