네트워크의 특정 무선 장치에서 오는 ARP 요청을 찾기 위해 Raspberry Pi를 사용하려고 합니다. 이것은 Amazon 대시 버튼 중 하나입니다. 대시보드가 Wi-Fi에 연결되었을 때 누군가 이 코드를 사용하여 청취했습니다.
from scapy.all import *
def arp_display(pkt):
if pkt[ARP].op == 1: #who-has (request)
if pkt[ARP].psrc == '0.0.0.0': # ARP Probe
if pkt[ARP].hwsrc == '74:75:48:5f:99:30': # button 1
print "Pushed Huggies"
elif pkt[ARP].hwsrc == '10:ae:60:00:4d:f3': # button 2
print "Pushed Elements"
else:
print "ARP Probe from unknown device: " + pkt[ARP].hwsrc
print sniff(prn=arp_display, filter="arp", store=0, count=10)
Raspbian(Python 및 scapy가 설치된 상태)에서 이것을 실행하면 오류가 발생합니다.
"IndexError: Layer [ARP] not found"
저는 scapy를 완전히 처음 접했습니다. 그것은 단지 scapy와의 첫 접촉일 뿐입니다. 어떤 아이디어라도 감사드립니다.
답변1
나도 같은 일을 하고 있어요. 찾아보니 tcpdump
설치가 안되어 있더군요.
간단한 방법으로 sudo apt-get install tcpdump
이 오류가 해결되었습니다.
답변2
동일한 오류가 발생했지만 안정적으로 발생하지 않고 때로는 즉시 실패하는 것으로 나타났습니다.
IndexError: Layer [ARP] not found
때로는 영원히 실행됩니다.
팁: count=0
영원히 실행되도록 인쇄 스니프 라인에 설정하면 카운트가 시간 초과되는 것 같습니다.
나는 처음에 웹사이트에서 scapy를 설치했지만 결국 다음을 수행하게 되었습니다.
apt-get update
apt-get upgrade
apt-get install tcpdump tcpreplay wireshark python-scapy
그리고 런타임이 제대로 작동하는 것 같습니다. 위의 모든 항목이 필요한지 확실하지 않지만 python-scapy는 설치 시 여러 그래픽 루틴과 함께 권장했습니다.
부록: 코드를 조작할 때마다 충돌 가능성 없이 실행되기 때문에 아주 이상한 일이 일어나고 있습니다.
답변3
여기서도 같은 문제가 발생했는데, 조건을 확인하는 것을 잊어버린 것으로 나타났습니다.
모든 if 블록 앞에 다음 줄을 추가하세요.
if pkt.haslayer(ARP):
답변4
내 Raspy B 2012에서는 CPU의 50% 이상을 차지합니다.
내가 시도한 것은
sniff(filter="tcp 및 포트 123", prn=print_summary,store=0)
방화벽을 통해 대시 버튼 요청을 Scapy를 실행하는 컴퓨터의 IP로 리디렉션합니다. 아이디어는 리소스를 절약하고 Mac 주소에 대한 모든 트래픽을 모니터링하는 대신 포트의 연결 요청만 모니터링하는 것입니다.
이는 CPU의 약 30%를 소비합니다. Ubuntu 시스템에서는 작동하지만 Raspi B에서는 작업을 시작한 다음 전체 네트워크의 연결을 표시하는 데 약 5분이 걸립니다. Ubuntu 시스템에서는 그렇지 않습니다. Raspy Musicbox 이미지가 깨진 것 같아요.