2008-10-23 38 views
6

Tôi tương đối mới đối với Python và đang gặp sự cố lập trình với Scapy, công cụ thao tác mạng Python. Tuy nhiên, tôi không thể nói đó là vấn đề về Scapy vì nó là một vấn đề mới của Python. Trên scapy site, họ đưa ra một chương trình mẫu mà tôi không thể chạy trên máy tính của riêng tôi:Python - Vấn đề về Thư viện

#! /usr/bin/env python 

import sys 
from scapy import sr1,IP,ICMP 

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

Để mà tôi nhận được:

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

Vì vậy, câu hỏi của tôi sau đó là: khi cài đặt Python thư viện, tôi có cần phải thay đổi con đường của tôi hoặc bất cứ điều gì tương tự? Ngoài ra, có cái gì tôi có thể chạy trong thông dịch viên để cho tôi biết nội dung của gói scapy không? Tôi có thể chạy from scapy import * tốt, nhưng vì tôi không có ý tưởng gì bên trong nó, thật khó để sử dụng nó.

+0

Kiểm tra cài đặt scapy của bạn. Trên máy của tôi, ví dụ của bạn hoạt động cả khi bạn đăng nó và với scapy làm thông dịch viên ... –

Trả lời

6

Với báo trước từ Federico Ramponi "Bạn nên sử dụng scapy làm thông dịch viên, không phải là thư viện", tôi muốn trả lời các phần không phải là scapy-cụ thể của câu hỏi.

Q: khi cài đặt thư viện Python, tôi có cần thay đổi đường dẫn hoặc bất kỳ thứ gì tương tự không?

A: Tôi nghĩ bạn đang nói về việc thay đổi PYTHONPATH toàn hệ thống. Điều này thường không cần thiết hoặc là một ý tưởng hay.

Thư viện Python của bên thứ ba phải được cài đặt trong thư mục hệ thống, chẳng hạn như /usr/lib/python2.5/site-packages hoặc được cài đặt cục bộ, trong trường hợp này bạn có thể muốn đặt PYTHONPATH trong tập lệnh Makefile hoặc trình điều khiển trình bao.

Q: Ngoài ra, có điều gì tôi có thể chạy trong thông dịch viên để cho tôi biết nội dung của gói xà phòng không?

A: Bạn có thể làm một cái gì đó như thế này:

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

Hoặc thậm chí tốt hơn:

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

Bonus câu hỏi hỏi trong nhận xét.

Q: 'Nhập khẩu scapy' giống như 'từ nhập khẩu xà phòng *'?

A:import scapy liên kết tên scapy trong vùng tên cục bộ với đối tượng mô-đun scapy. OTOH, from scapy import * không ràng buộc tên mô-đun, nhưng tất cả các tên công khai được định nghĩa trong mô-đun scapy đều bị ràng buộc trong không gian tên cục bộ.

Xem đoạn 6 và 7 của Hướng dẫn tham khảo Python, 6.12 The import statement.

+0

Cảm ơn sự giúp đỡ! Câu hỏi bên nhanh: là 'nhập khẩu scapy' giống như 'từ nhập khẩu xà phòng *'? –

+0

nội dung của gói không phải lúc nào cũng được nói bởi dir (package_name) vì tìm nạp lười. –

3

Nó cho bạn biết rằng nó không thể tìm thấy sr1 trong scapy. Bạn không chắc chắn về cách bạn mới, nhưng thông dịch viên luôn là bạn của bạn. Khởi động trình thông dịch (chỉ cần gõ "python" trên dòng lệnh), và tại dấu nhắc (>>>) gõ (nhưng đừng gõ>, chúng sẽ tự hiển thị):

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

Dòng cuối cùng sẽ in nhiều nội dung.Bạn có thấy 'sr1', 'IP' và 'ICMP' ở đó ở đâu không? Nếu không, ví dụ có lỗi.

cũng cố gắng giúp (scapy)

Đó là khoảng bao nhiêu tôi có thể giúp bạn mà không cần cài scapy và nhìn vào nguồn nộp thực tế của bạn thân mình.

1

Gói scapy là công cụ để thao tác và theo dõi mạng. Tôi tò mò như những gì bạn đang cố gắng làm với nó. Thật thô lỗ khi theo dõi bạn bè của bạn. :-)

[email protected]:~/src$ wget -q http://www.secdev.org/projects/scapy/files/scapy-latest.zip 
[email protected]:~/src$ unzip -qq scapy-latest.zip 
warning [scapy-latest.zip]: 61 extra bytes at beginning or within zipfile 
    (attempting to process anyway) 
[email protected]:~/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): 

Theo dòng cuối cùng, sr1 là một chức năng được xác định trong scapy.sendrecv. Ai đó nên gửi một lỗi tài liệu với tác giả.

+0

Vì bạn đã hỏi, tôi thực sự cần phải học cách sử dụng nó một cách hiệu quả như bài tập về nhà cho lớp bảo mật của tôi :) –

4

tôi đã cùng một vấn đề, trong việc sử dụng scapy v2.x

from scapy.all import * 

thay vì các phiên bản 1.x

from scapy import * 

như được viết here

Enjoy it =)

+0

Tìm thấy tuyệt vời! –

Các vấn đề liên quan