小智 5
我自己遇到了这个问题.这很烦人.经过多次调试,得到了答案.
问题的原因似乎是scapy将所有内容导入全局命名空间的方式,这似乎打破了PyCharm(名字冲突,也许?).
顺便说一句,这一切都适用于2016年10月18日的scapy v2.3.3.
随着scapy的加载,它最终会遇到一条线scapy/all.py:
from scapy.layers.all import *
Run Code Online (Sandbox Code Playgroud)
这会加载scapy/layers/all.py哪些负载scapy/config.py.最后一个文件初始化Conf.load_layers[]为模块列表(in scapy/layers).
scapy/layers/all.py然后遍历此列表,调用_import_star()每个模块.
加载后scapy/layers/x509.py,PyCharm中的所有断点都会停止工作.
我有四个解决方案,选择你最喜欢的解决方案......
(1)如果你不使用任何与X509做,你可以简单地从分配给列表中删除此模块Conf.load_layers[]中scapy/config.py(在我的副本线383 config.py).警告:这是一个真正的黑客 - 请避免这样做,除非你没有其他方法.
如果需要暂时调试,还可以使用此代码示例:
from scapy import config
config.Conf.load_layers.remove("x509")
from scapy.all import *
Run Code Online (Sandbox Code Playgroud)
(2)问题是将符号导入全局命名空间.这对于类很好,对常量不好.有代码_import_star()检查符号的名称,如果以符号_(即"私有"名称)开头,则不会将其加载到全局名称空间中.您可以修改此函数以x509通过忽略不开始的名称来特别处理模块X509_.希望这将导入定义的类x509而不是常量.这是一个示例补丁:
*** layers/all.py 2017-03-31 12:44:00.673248054 +0100
--- layers/all.py 2017-03-31 12:44:00.673248054 +0100
***************
*** 21,26 ****
--- 21,32 ----
for name in mod.__dict__['__all__']:
__all__.append(name)
globals()[name] = mod.__dict__[name]
+ elif m == "x509":
+ # import but rename as we go ...
+ for name, sym in mod.__dict__.iteritems():
+ if name[0] != '_' and name[:5] != "X509_":
+ __all__.append("_x509_" + name)
+ globals()["_x509_" + name] = sym
else:
# import all the non-private symbols
for name, sym in mod.__dict__.iteritems():
Run Code Online (Sandbox Code Playgroud)
警告:这是一个真正的黑客 - 请避免这样做,除非你没有其他方法.
(3)这是解决方案(2)的变体,也是A REAL HACK(等等)的变形.您可以编辑scapy/layers/x509.py并添加_到所有常量.例如,default_directoryName应将所有实例更改为_default_directoryName.我发现需要改变以下常量:default_directoryName,reasons_mapping,cRL_reasons,ext_mapping,default_issuer,default_subject,attrName_mapping和attrName_specials.这很好,因为它匹配应用于x509.py我在scapy git repo中找到的修复...
(4)您可以更新到下一版本的scapy.我不知道这是不是v2.3.4或v2.4,因为(在撰写本文时)尚未发布下一个版本.因此,虽然这个(缺少新版本)仍在继续,但您可以更新到最新的开发版本(他们已经在2017年2月8日解决了这个问题).我使用安装在我的主目录下的scapy(而不是在系统python包的位置),所以我做了以下内容:
pip uninstall scapy
git clone https://github.com/secdev/scapy /tmp/scapy
cd /tmp/scapy
python setup.py install --user
cd -
rm -rf /tmp/scapy
Run Code Online (Sandbox Code Playgroud)
祝好运 !
| 归档时间: |
|
| 查看次数: |
959 次 |
| 最近记录: |