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?
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?
điều gì về specyfing một lfilter
cho sniff
?
zzz = sniff(lfilter=lambda d: d.src == 'aa:bb:cc:dd:ee:ff')
dst
và src
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)
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
thử ping một địa chỉ ip khác? – macfij
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
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).
bạn có thể sử dụng giao diện không? –
Bạn có thể giải thích sâu hơn một chút không? – bzupnick