我正在使用scapy在python中编写的网络工具.
作为IDE,我正在使用Pycharm.
我的代码有效.因此,如果我运行它,一切都按预期工作.
我的问题是PyCharm给了我一些错误.
它标志着IP,TCP,以太网的所有用途……作为未定义的参考…
我的代码的相关部分看起来像这样
#!/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")
...
我尝试了很多使用google发现的东西,比如将我的src文件夹添加为源根,我刷新了所有可以找到的缓存并重新启动了PyCharm几十次,但没有任何效果……
由于代码工作,这是一个小问题,但我仍然希望我的IDE按预期工作
我在MacOS下工作,我使用虚拟环境
解决方法:
这是一个PyCharm问题. Scapy使用dynamic loading(使用importlib)加载许多模块/自定义模块,pycharm无法检测到.这允许用户选择他们想要加载的图层.
解决方法是从相关的scapy文件导入您需要的任何内容,而不使用全部.它更干净但更长.或者,如果您没有寻找干净的东西,可以在IDE中使用“添加例外”.
这里有一些有用的模块
> scapy.layers.inet,你可以获得IP,TCP ..
> scapy.layers.inet6
> scapy.layers.dns
> scapy.sendrecv有srp,sr,sr1,sendp,send …
> scapy.supersocket直接访问scapy的套接字
> scapy.layers.l2,它有以太网,ARP ..
> scapy.layers.dot11用于802.11的东西
> scapy.utils for wrpcap,rdpcap …
> conf对象的scapy.config(具有conf.route或conf.route6等属性)
我建议做的是打开Scapy shell(或从控制台中的scapy.all import *导入)并使用help(…)检查层/功能是从哪个模块