代码之家  ›  专栏  ›  技术社区  ›  Chris Bunch

python-库问题

  •  6
  • Chris Bunch  · 技术社区  · 16 年前

    我对python比较陌生,在使用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 * 很好,但是因为我不知道里面是什么,所以很难使用它。

    4 回复  |  直到 16 年前
        1
  •  6
  •   ddaa    16 年前

    有了费德里科·拉姆波尼的警告,“你应该把斯凯作为自己的翻译,而不是图书馆”,我想回答问题中非斯凯的具体部分。

    问: 在安装python库时,需要更改路径或类似的内容吗?

    答: 我想你是在说改变 PYTHONPATH 全系统。这通常不是必需的,也不是一个好主意。

    第三方python库应该安装在系统目录中,例如 /usr/lib/python2.5/site-packages 或在本地安装,在这种情况下,您可能需要设置 Python路径 在生成文件或驱动程序外壳脚本中。

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

    答: 你可以这样做:

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

    甚至更好:

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

    在评论中提出的额外问题。

    问: “import scapy”是否与“from scapy import*”相同?

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

    参见python参考手册第6和7段, 6.12 The import statement .

        2
  •  4
  •   Emilio    16 年前

    我也有同样的问题,在用2.x版的时候

     from scapy.all import * 
    

    而是v1.x

     from scapy import *
    

    如书面 here

    享受它=)

        3
  •  3
  •   kaleissin    16 年前

    它告诉你它在scapy中找不到sr1。不知道你是多么的新手,但翻译总是你的朋友。启动解释器(只需在命令行上键入“python”),并在提示(>>>)下键入(但不要键入>,它们将自己显示出来):

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

    最后一行应该打印很多东西。你看到“sr1”、“ip”和“icmp”了吗?如果没有,这个例子就是错误的。

    还可以尝试帮助(scapy)

    这就是在不安装scapy和自己查看实际源文件的情况下,我能为您提供多少帮助。

        4
  •  1
  •   Alex Coventry    16 年前

    这个 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):
    

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