2014-06-24 17 views
5

Các mã sau đây:Làm thế nào để lọc theo địa chỉ MAC Ethernet

sniff(filter = "dst aa:bb:cc:dd:ee") 

ném một lỗi vì sniff được mong đợi một IP, không phải là một MAC.

Vậy bạn phải lọc bằng MAC như thế nào?

+0

bạn có thể sử dụng giao diện không? –

+0

Bạn có thể giải thích sâu hơn một chút không? – bzupnick

Trả lời

1

điều gì về specyfing một lfilter cho sniff?

zzz = sniff(lfilter=lambda d: d.src == 'aa:bb:cc:dd:ee:ff') 


dstsrc là thuộc tính của thông điệp ngửi.


trước đây tôi đã đăng câu trả lời trong đó stop_filter được chỉ định. tôi cho rằng nó sẽ không làm việc cho bạn, vì scapy sẽ dừng sau khi nhận được gói tin đầu tiên phù hợp với địa chỉ mac từ stop_filter. lfilter nên thực hiện công việc.

từ sendrecv.py:

lfilter: python function applied to each packet to determine     
     if further action may be done           
     ex: lfilter = lambda x: x.haslayer(Padding) 
+0

Tôi đã thử câu trả lời của bạn với bộ lọc trong tập lệnh của tôi và trong phiên dịch. Tôi ping từ MAC nguồn chính xác và nó dường như không đánh hơi nó. – bzupnick

+0

thử ping một địa chỉ ip khác? – macfij

+0

Vấn đề của tôi là MAC của tôi có chữ hoa và Scapy mang chữ thường. Hoạt động đẹp =) – bzupnick

2

Tham số filter cần một bộ lọc BPF. Cú pháp chính xác là do đó filter="ether dst aa:bb:cc:dd:ee:ff".

Điều này nhanh hơn nhiều so với sử dụng hàm Python như tham số lfilter, như được đề xuất (chính xác) bởi macfij trong câu trả lời khác (cộng với bạn không phải đối phó với chữ hoa/chữ thường trong địa chỉ MAC).

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