PyCharm:Scapy 未解决的引用
Posted
技术标签:
【中文标题】PyCharm:Scapy 未解决的引用【英文标题】:PyCharm: Unresolved reference with Scapy 【发布时间】:2018-01-23 07:17:23 【问题描述】:我正在开发一个使用 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 下工作,我使用虚拟环境
【问题讨论】:
您使用的是虚拟环境吗? 哦,忘了提这个...是的,我正在使用 virtualenv 你在配置 pycharm 以使用 virtualenv 吗? 是的,PyCharm 将 VirtualEnv 配置为“解释器”,我通过 PyCharm 而不是通过 virtualenv 中的 pip 安装了所有需要的数据包 我遇到了同样的问题。这里有什么解决方案吗? 【参考方案1】:遇到同样的问题,试试这样导入:
from scapy.layers.inet import IP, UDP, wrpcap, Ether
它对我有用。
【讨论】:
【参考方案2】:这是一个 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
有 Ether, ARP..
scapy.layers.dot11
用于 802.11 的东西
scapy.utils
为wrpcap
,rdpcap
...
scapy.config
用于conf
对象(具有conf.route
或conf.route6
等属性)
我建议做的是打开 Scapy shell(或在控制台中导入 from scapy.all import *
)并使用 help(...)
检查层/功能来自哪个模块。您还可以通过here查看在线 API 参考(它有一个搜索栏)
【讨论】:
以上是关于PyCharm:Scapy 未解决的引用的主要内容,如果未能解决你的问题,请参考以下文章
在 PyCharm 中使用 kivy 属性时,我不断收到“未解决的引用”错误