Python/Scapy — Вынюхивать и хранить исходный IP-адрес и исходный MAC-адрес

#python #scapy #packet-sniffers #sniffing

Вопрос:

Попытка создать функцию, которая выполняет следующие действия:

  1. Использует функцию sniff() для прослушивания трафика в интерфейсе en0ps3
  2. Обрабатывайте трафик, собираемый функцией sniff()
  3. Сохраните исходный IP-адрес и исходный MAC-адрес.
  4. Если IP-адрес уже сохранен, но отображается другой MAC-адрес, то сценарий также должен хранить этот дополнительный MAC-адрес
  5. Пользователь должен видеть список хостов, отображаемых в терминале во время выполнения сценария

(У меня есть еще один отдельный пример сценария, который генерирует ARP-трафик для тестирования функциональности)

Вывод, который я получаю, приведен ниже — может ли кто-нибудь подтвердить, что это правильно? Я новичок и борюсь со Scapy, чтобы подтвердить свою работу:

 ^CEther / ARP who has 192.168.1.10 says 192.168.1.1 Ether / ARP is at 10:11:12:ab:ab:ab says 192.168.1.10 Ether / ARP who has 192.168.1.11 says 192.168.1.2 Ether / ARP is at 10:11:12:bc:bc:bc says 192.168.1.11 Ether / ARP who has 192.168.1.12 says 192.168.1.3 Ether / ARP is at 10:11:12:cd:cd:cd says 192.168.1.12 Ether / ARP who has 192.168.1.13 says 192.168.1.4 Ether / ARP is at 10:11:12:de:de:de says 192.168.1.13 Ether / ARP who has 192.168.1.14 says 192.168.1.5 Ether / ARP is at 10:11:12:ef:ef:ef says 192.168.1.14 Ether / ARP who has 192.168.1.15 says 192.168.1.6 Ether / ARP is at 10:11:12:f0:f0:f0 says 192.168.1.15 Ether / ARP is at de:ad:be:ef:de:ad says 192.168.1.10  

Мой код таков

 from scapy.all import *   ethernetHeader = Ether() ipHeader = IP() icmpHeader = ICMP()  pkt = ethernetHeader/ipHeader/icmpHeader ##filtering out ARP traffic with an op code of 2 or "is-at"   def filter_packets(packets):  def packet_handler(pkt):  packets.append(pkt)    return packet_handler    def main():    packets = []    sniff(iface="enp0s3", prn=filter_packets(packets))      for p in packets:  print(p.summary(ipHeader))   main()