【问题标题】:Python - Library ProblemsPython - 库问题
【发布时间】:2010-09-18 18:56:03
【问题描述】:

我对 Python 比较陌生,并且在使用 Python 网络操作工具 Scapy 进行编程时遇到问题。但是,我不知道这是否是一个 Scapy 问题,因为它是一个 Python 新手问题。在scapy site 上,他们提供了一个我无法在我自己的机器上运行的示例程序:

#! /usr/bin/env python

import sys
from scapy import sr1,IP,ICMP

p=sr1(IP(dst=sys.argv[1])/ICMP())
if p:
    p.show()

我得到的:

Traceback (most recent call last):
  File "test.py", line 4, in <module>
    from scapy import sr1,IP,ICMP
ImportError: cannot import name sr1

那么我的问题是:在安装 Python 库时,我是否需要更改路径或类似的东西?另外,我可以在解释器中运行一些东西来告诉我 scapy 包的内容吗?我可以运行from scapy import * 就好了,但是由于我不知道里面是什么,所以很难使用它。

【问题讨论】:

  • 检查你的 scapy 安装。在我的机器上,您的示例既可以在您发布时使用,也可以使用 scapy 作为解释器...

标签: python networking scapy


【解决方案1】:

我有同样的问题,在 scapy v2.x 中使用

 from scapy.all import * 

而不是 v1.x

 from scapy import *

如书面here

好好享受吧=)

【讨论】:

    【解决方案2】:

    它告诉你它在 scapy 中找不到 sr1。不确定你是多么的新手,但口译员永远是你的朋友。启动解释器(只需在命令行中输入“python”),然后在提示符 (>>>) 处输入(但不要输入 >,它们会自行显示):

    >>> import scapy
    >>> from pprint import pformat
    >>> pformat(dir(scapy))
    

    最后一行应该打印很多东西。您是否在任何地方看到“sr1”、“IP”和“ICMP”?如果不是,则示例有问题。

    也试试帮助(scapy)

    这就是我可以在不安装 scapy 并亲自查看您的实际源文件的情况下为您提供多少帮助。

    【讨论】:

      【解决方案3】:

      根据 Federico Ramponi 的警告“您应该单独使用 scapy 作为解释器,而不是作为库”,我想回答问题的非 scapy 特定部分。

      问:在安装 Python 库时,是否需要更改路径或类似内容?

      答:我认为您正在谈论在系统范围内更改 PYTHONPATH。这通常不是必需的,也不是一个好主意。

      第三方 Python 库应安装在系统目录中,例如 /usr/lib/python2.5/site-packages,或安装在本地,在这种情况下,您可能需要在 Makefile 或驱动程序 shell 脚本中设置 PYTHONPATH

      问:另外,我可以在解释器中运行一些东西来告诉我 scapy 包的内容吗?

      答:你可以这样做:

      >>> import scapy
      >>> dir(scapy)
      

      甚至更好:

      >>> import scapy
      >>> help(scapy)
      

      评论中提出的额外问题。

      问: 'import scapy' 和 'from scapy import *' 一样吗?

      答: import scapy 将本地命名空间中的 scapy 名称绑定到 scapy 模块对象。 OTOH,from scapy import * 不绑定模块名称,但是在 scapy 模块中定义的所有公共名称都绑定在本地命名空间中。

      请参阅 Python 参考手册的第 6 和 7 段,6.12 The import statement

      【讨论】:

      • 感谢您的帮助!小问题:'import scapy' 和 'from scapy import *' 一样吗?
      • 由于延迟获取,dir(package_name) 无法始终告知包的内容。
      【解决方案4】:

      scapy 包是一个用于网络操作和监控的工具。我很好奇你想用它做什么。监视你的朋友是不礼貌的。 :-)

      coventry@metta:~/src$ wget -q http://www.secdev.org/projects/scapy/files/scapy-latest.zip
      coventry@metta:~/src$ unzip -qq scapy-latest.zip 
      warning [scapy-latest.zip]:  61 extra bytes at beginning or within zipfile
        (attempting to process anyway)
      coventry@metta:~/src$ find scapy-2.0.0.10 -name \*.py | xargs grep sr1
      scapy-2.0.0.10/scapy/layers/dns.py:    r=sr1(IP(dst=nameserver)/UDP()/DNS(opcode=5,
      scapy-2.0.0.10/scapy/layers/dns.py:    r=sr1(IP(dst=nameserver)/UDP()/DNS(opcode=5,
      scapy-2.0.0.10/scapy/layers/inet6.py:from scapy.sendrecv import sr,sr1,srp1
      scapy-2.0.0.10/scapy/layers/snmp.py:            r = sr1(IP(dst=dst)/UDP(sport=RandShort())/SNMP(community=community, PDU=SNMPnext(varbindlist=[SNMPvarbind(oid=oid)])),timeout=2, chainCC=1, verbose=0, retry=2)
      scapy-2.0.0.10/scapy/layers/inet.py:from scapy.sendrecv import sr,sr1,srp1
      scapy-2.0.0.10/scapy/layers/inet.py:            p = sr1(IP(dst=target, options="\x00"*40, proto=200)/"XXXXYYYYYYYYYYYY",timeout=timeout,verbose=0)
      scapy-2.0.0.10/scapy/sendrecv.py:def sr1(x,filter=None,iface=None, nofilter=0, *args,**kargs):
      

      根据最后一行,sr1scapy.sendrecv中定义的函数。应该有人向作者提交文档错误。

      【讨论】:

      • 既然你问了,我实际上需要学习如何有效地使用它作为我的安全课的作业:)
      猜你喜欢
      • 1970-01-01
      • 2022-01-12
      • 2016-08-28
      • 2021-05-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多