Это нормальное поведение, вы находитесь в том же контексте класса, что означает, что вы можете получить доступ к частной собственности, даже если это новый экземпляр.
Здесь C # эквивалент того же поведения (действительный)
public class A
{
private int _prop;
public void MyMethod()
{
var x = new A();
x._prop = 5;
}
}
С протестом от Federico Ramponi "Необходимо использовать scapy в качестве интерпретатора его собственным, не как библиотека", я хочу ответить на non-scapy-specific части вопроса.
Q: при установке библиотек Python я должен изменить свой путь или что-либо подобное?
A: Я думаю, что Вы говорите об изменении PYTHONPATH
в масштабе всей системы. Это обычно не требуется или хорошая идея.
Сторонние библиотеки Python должны или быть установлены в системных каталогах, такой как /usr/lib/python2.5/site-packages
, или установленный локально, в этом случае Вы могли бы хотеть установить PYTHONPATH
в Вашем Make-файле или в сценарии оболочки драйвера.
Q: Кроме того, есть ли что-то, что я могу выполнить в интерпретаторе, чтобы сказать мне содержание scapy пакета?
A: Можно сделать что-то вроде этого:
>>> import scapy
>>> dir(scapy)
Или еще лучше:
>>> import scapy
>>> help(scapy)
Вопрос премии задают в комментарии.
Q: 'Импорт scapy' то же как 'от импорта scapy *'?
A: import scapy
связывает имя scapy в локальном пространстве имен к scapy объекту модуля. OTOH, from scapy import *
не связывает имя модуля, но все общедоступные имена, определенные в scapy модуле, связываются в локальном пространстве имен.
См. абзацы 6 и 7 Справочника Python, 6.12 оператор импорта.
Это говорит Вам, что не может найти sr1 в scapy. Не уверенный, как newbite Вы, но интерпретатор всегда является Вашим другом. Включите интерпретатор (просто вводят "Python" на командной строке), и при подсказке (>>>) тип (но не вводите>, они обнаружатся собой):
>>> import scapy
>>> from pprint import pformat
>>> pformat(dir(scapy))
Последняя строка должна распечатать много материала. Вы видите 'sr1', 'IP' и 'ICMP' там где-нибудь? В противном случае пример виновным.
Попытка также помогает (scapy)
Это о том, сколько я могу помочь Вам, не устанавливая scapy и смотря на Ваш фактический исходный файл сам.
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
. Кто-то должен зарегистрировать ошибку документации с автором.
У меня была та же проблема, в scapy v2.x используйте
from scapy.all import *
вместо v1.x
from scapy import *
, как написано здесь
Наслаждайтесь =)