PyCharm:Scapy 未解决的引用

Posted

技术标签:

【中文标题】PyCharm:Scapy 未解决的引用【英文标题】:PyCharm: Unresolved reference with Scapy 【发布时间】:2018-01-23 07:17:23 【问题描述】:

我正在开发一个使用 scapy 在 python 中编写的网络工具。 作为 IDE,我正在使用 Pycharm。 我的代码有效。因此,如果我运行它,一切都会按预期运行。

我的问题是 PyCharm 给了我一些错误。 它将IPTCPEther、...的每次使用标记为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.utilswrpcaprdpcap... scapy.config 用于conf 对象(具有conf.routeconf.route6 等属性)

我建议做的是打开 Scapy shell(或在控制台中导入 from scapy.all import *)并使用 help(...) 检查层/功能来自哪个模块。您还可以通过here查看在线 API 参考(它有一个搜索栏)

【讨论】:

以上是关于PyCharm:Scapy 未解决的引用的主要内容,如果未能解决你的问题,请参考以下文章

在 PyCharm 中使用 kivy 属性时,我不断收到“未解决的引用”错误

PyCharm/IntelliJ 中的红色下划线(未解决的引用)停止工作 - 在我的一些 Anaconda 项目中

使用开发安装后,警告对未解决的引用不起作用

表是现成的。 PyCharm 中未解析的表引用

未解决的参考:PyCharm 中的“django”错误

pycharm安装之后说未确认怎么办