#python #scapy #packet-sniffers #sniffing
Вопрос:
Попытка создать функцию, которая выполняет следующие действия:
- Использует функцию sniff() для прослушивания трафика в интерфейсе en0ps3
- Обрабатывайте трафик, собираемый функцией sniff()
- Сохраните исходный IP-адрес и исходный MAC-адрес.
- Если IP-адрес уже сохранен, но отображается другой MAC-адрес, то сценарий также должен хранить этот дополнительный MAC-адрес
- Пользователь должен видеть список хостов, отображаемых в терминале во время выполнения сценария
(У меня есть еще один отдельный пример сценария, который генерирует 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()