Pi에서 ARP를 스니핑하기 위해 Python과 Scapy 사용


12

네트워크의 특정 무선 장치에서 ARP 요청을 찾기 위해 Raspberry Pi를 사용하려고합니다. Amazon 대시 버튼 중 하나입니다. 누군가 대시가 wifi에 연결될 때이 코드를 사용하여 청취했습니다.

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"

나는 스 캐피에 익숙하지 않고 처음으로 다이빙을합니다. 어떤 아이디어에 감사드립니다.


이 작업을 해 본 적이 있습니까? 이 문제를 극복했지만 여전히 내 버튼에서 ARP 요청을 볼 수 없습니다
jbnunn

@jbnunn이 대답은 나를 위해 일한 stackoverflow.com/questions/24415294/...
Katu

답변:


7

나도 같은 일을하고 있습니다. 내가 찾은 tcpdump것은 설치되지 않았다는 것입니다.

간단한 sudo apt-get install tcpdump이 오류가 수정되었습니다.


6

나는 같은 오류가 있었지만 안정적으로 발생하지 않는다는 것을 알았습니다. 때로는 즉시 실패합니다.

IndexError: Layer [ARP] not found

때로는 영원합니다.

힌트 : count=0인쇄 스 니프 라인에서 영원히 실행되도록 설정하면 카운트가 시간 초과 된 것으로 나타납니다.

처음에는 웹 사이트에서 scapy를 설치했지만 결국은 다음과 같습니다.

apt-get update
apt-get upgrade
apt-get install tcpdump tcpreplay wireshark python-scapy

그리고 그것이 실행될 때 잘 돌아가는 것처럼 보입니다. 위의 내용이 모두 필요하지는 않았지만 설치시 python-scapy는 (그리고 많은 그래픽 루틴) 권장했습니다.

부록 : 코드를 변경 할 때마다 충돌없이 변경 될 가능성이 있으므로 실제로 이상한 일이 발생합니다.


1

우리는 여기에 같은 문제가 있었고 한 가지 조건을 확인하는 것을 잊어 버렸습니다.

모든 if 블록 앞에이 줄을 추가하십시오.

if pkt.haslayer(ARP):

0

Raspy B 2012에서 CPU의 50 % 이상을 차지합니다.

내가 시도한 것은

sniff (filter = "tcp 및 포트 123", prn = print_summary, store = 0)

대시 버튼 요청을 방화벽을 통해 Scapy가 실행되는 머신의 IP로 리디렉션했습니다. 아이디어는 리소스를 저장하고 mac 주소에 대한 모든 트래픽을 모니터링하는 것이 아니라 포트에 대한 연결 요청을 보는 것입니다.

이것은 ~ 30 % Cpu를 소비합니다. Ubuntu 시스템에서는 작동하지만 Raspi B에서는 작동하기 시작하는 데 약 5 분이 소요되며 네트워크 전체에서 Ubuntu 시스템에없는 연결을 표시합니다. Raspy Musicbox 이미지에서 깨진 것으로 가정합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.