6

私は比較的 Python に不慣れで、Python ネットワーク操作ツールである Scapy でのプログラミングに問題があります。ただし、それが Python 初心者の問題であるのと同じくらい Scapy の問題であるかどうかはわかりません。scapy サイトでは、自分のマシンでは実行できないサンプル プログラムが提供されています。

#! /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

4 に答える 4

6

Federico Ramponi からの警告「scapy をライブラリとしてではなく、独自のインタープリターとして使用する必要があります」という警告とともに、質問の scapy 固有ではない部分に答えたいと思います。

Q: Python ライブラリをインストールするとき、パスなどを変更する必要がありますか?

A:PYTHONPATHシステム全体の変更について話していると思います。これは通常、必要ないか、良い考えです。

サード パーティの Python ライブラリは、 などのシステム ディレクトリにインストールするか、/usr/lib/python2.5/site-packagesローカルにインストールする必要があります。この場合PYTHONPATH、Makefile またはドライバー シェル スクリプトで設定する必要があります。

Q:また、scapy パッケージの内容を教えてくれるインタープリターで実行できるものはありますか?

A:次のようなことができます。

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

またはさらに良い:

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

コメントで尋ねられたボーナスの質問。

Q: 'import scapy' は 'from scapy import *' と同じですか?

A: import scapyローカル名前空間の scapy 名を scapy モジュール オブジェクトにバインドします。OTOHfrom scapy import *はモジュール名をバインドしませんが、scapy モジュールで定義されたすべてのパブリック名はローカル名前空間にバインドされます。

Python リファレンス マニュアルの 6 節と 7 節、6.12 The import statement を参照してください。

于 2008-10-23T13:59:23.523 に答える
4

私は同じ問題を抱えていました、scapyv2.xの使用で

 from scapy.all import * 

代わりにv1.x

 from scapy import *

ここに書かれているように

楽しんでください=)

于 2009-06-02T22:30:00.657 に答える
3

scapy で sr1 が見つからないことがわかります。あなたがどれほど初心者かはわかりませんが、通訳者はいつでもあなたの味方です。インタープリターを起動し (コマンドラインで「python」と入力するだけ)、プロンプト (>>>) で次のように入力します (ただし、> は入力しないでください。単独で表示されます)。

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

最後の行は多くのものを出力するはずです。「sr1」、「IP」、および「ICMP」はどこかにありますか? そうでない場合は、例に誤りがあります。

help(scapy)も試してみてください

それは、scapy をインストールして実際のソース ファイルを自分で見なくても、私がどれだけあなたを助けることができるかということです。

于 2008-10-23T14:05:46.273 に答える
1

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です。誰かが作者にドキュメントのバグを提出する必要があります。

于 2008-10-23T16:04:30.807 に答える