我正在研究一个使用scapy在python中编写的网络工具 作为IDE,我正在使用Pycharm 我的代码有效。因此,如果我运行它,一切都按预期工作。
我的问题是PyCharm给了我一些错误
它标记IP
,TCP
,Ether
,...的所有用途,如Undefined Reference to ...
我的代码的相关部分看起来像这样
#!/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下工作,我使用虚拟环境
答案 0 :(得分:3)
这是一个PyCharm问题。 Scapy使用dynamic loading(使用importlib
)来加载pycharm无法检测到的许多模块/自定义模块。这样,用户可以选择要加载的图层。
解决方法是从相关的scapy文件中导入所需的任何内容,而无需使用all
。它比较干净,但是需要更长的时间。或者,如果您不想要干净的东西,也可以在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
代表wrpcap
,rdpcap
... scapy.config
用于conf
对象(它具有conf.route
或conf.route6
之类的属性)我建议做的是打开Scapy shell(或在控制台中导入from scapy.all import *
),并使用help(...)
答案 1 :(得分:2)
遇到相同的问题,请尝试通过以下方式导入:
from scapy.layers.inet import IP, UDP, wrpcap, Ether
对我有用。