ใช้ Python และ Scapy เพื่อดมกลิ่นสำหรับ ARP บน Pi


12

ฉันพยายามใช้ Raspberry Pi เพื่อค้นหาคำขอ ARP จากอุปกรณ์ไร้สายเฉพาะบนเครือข่ายของฉัน มันเป็นหนึ่งในปุ่มแดชของ 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"

ฉันไม่คุ้นเคยกับ scapy และเพิ่งเข้ามาเป็นครั้งแรก ขอบคุณสำหรับความคิดใด ๆ


คุณเคยทำงานนี้ไหม ฉันเคยผ่านปัญหานั้นมาแล้ว แต่ก็ยังไม่เห็นคำขอ ARP จากปุ่มของฉัน
jbnunn

@jbnunn คำตอบนี้ใช้ได้สำหรับฉันstackoverflow.com/questions/24415294/…
Katu

คำตอบ:


7

ฉันก็กำลังทำสิ่งเดียวกัน สิ่งที่ฉันพบtcpdumpคือไม่ได้ติดตั้ง

ง่ายsudo apt-get install tcpdumpแก้ไขข้อผิดพลาดนี้สำหรับฉัน


6

ฉันมีข้อผิดพลาดเดียวกัน แต่พบว่ามันไม่ได้เกิดขึ้นอย่างน่าเชื่อถือบางครั้งก็ล้มเหลวทันทีด้วย:

IndexError: Layer [ARP] not found

และบางครั้งก็ทำงานตลอดไป

คำแนะนำ: ตั้งค่าcount=0ในบรรทัด sniff พิมพ์เพื่อให้มันรันตลอดไปนับดูเหมือนจะหมดเวลา

ฉันได้ติดตั้ง scapy ในตอนแรกจากเว็บไซต์ แต่จบลงด้วยการทำ:

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

และดูเหมือนว่าจะทำงานได้ดีเมื่อมันทำงาน ไม่แน่ใจว่าฉันต้องการทั้งหมดข้างต้น แต่ python-scapy แนะนำพวกเขา (และชุดคำสั่งกราฟิก) เมื่อฉันติดตั้ง

ภาคผนวก: ทุกครั้งที่ฉันเล่นซอกับโค้ดความน่าจะเป็นที่มันจะทำงานโดยไม่มีการเปลี่ยนแปลงที่ล้มเหลวดังนั้นจึงมีบางอย่างแปลก ๆ เกิดขึ้น


1

เรามีปัญหาเดียวกันที่นี่และปรากฎว่าเราลืมตรวจสอบเงื่อนไขหนึ่ง

เพียงเพิ่มบรรทัดนี้ก่อนทั้งหมดถ้าบล็อก:

if pkt.haslayer(ARP):

0

Raspy B 2012 ของฉันกินได้มากกว่า 50% ของ CPU

สิ่งที่ฉันพยายามคือ

sniff (filter = "tcp และพอร์ต 123", prn = print_summary, store = 0)

ฉันเปลี่ยนเส้นทางขอปุ่ม Dash ไปยัง IP ของเครื่องที่ Scapy ทำงานผ่านไฟร์วอลล์ของฉัน แนวคิดคือเพื่อบันทึก ressources และไม่ตรวจสอบปริมาณการใช้งานทั้งหมดของที่อยู่ mac แต่เพื่อดูคำขอการเชื่อมต่อไปยังพอร์ต

สิ่งนี้ใช้ Cpu ~ 30% มันทำงานบนเครื่อง Ubuntu แต่ใช้ Raspi B ใช้เวลาประมาณ 5 นาทีในการเริ่มทำงานจากนั้นแสดงการเชื่อมต่อจากทั่วทุกเครือข่ายของฉัน - สิ่งที่ไม่ได้อยู่ในเครื่อง Ubuntu ฉันถือว่ามันเป็นภาพ Raspy Musicbox

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.