#python #scapy
#python #scapy
Вопрос:
Я создаю сетевой сканер с помощью Python, используя Scapy. Я пытался отправлять ARP-пакеты, но по какой-то причине на них не отвечают.
#!/usr/bin/env python3
from scapy.all import *
def scan(ip):
arp_request = ARP(pdst=ip)
broadcast = Ether(dst="ff:ff:ff:ff:ff:ff")
arp_request_broadcast = arp_request/broadcast
answered_list = srp(arp_request_broadcast, timeout=2)[0]
for element in answered_list:
print(element[1].show())
scan("192.168.1.0/24")
Его выполнение приводит к следующему:
[void@Void Network Scanner]$ sudo python3 tutorial_netscanner.py
[sudo] password for void:
Begin emission:
Finished sending 256 packets.
............................................................
Received 60 packets, got 0 answers, remaining 256 packets
Странная часть заключается в том, что если я запускаю это из интерактивной оболочки scapy, это работает, и arp-пакеты получают ответ.
arping("192.168.1.0/24")
Я очень смущен тем, почему это не работает, код кажется мне совершенно нормальным, если бы кто-нибудь мог мне помочь, это было бы здорово. Спасибо.
Ответ №1:
arp_request/broadcast
неверно. Самые внешние протоколы идут слева. Если вы используете Wireshark, чтобы посмотреть, что происходит (первое, что вы должны сделать, когда происходит что-то подобное), вы можете увидеть, что это не то, что вы ожидаете:
По сути, это искаженный пакет. Вам нужно broadcast / arp_request
; хотя указывать Ether
слой необязательно. Вы можете использовать просто ARP
(и sr
).
Используйте Wireshark. Это бесценный инструмент. Вы должны запускать его только в сетях, которые вы контролируете / разрешаете отслеживать, но это действительно необходимо.
Комментарии:
1. Большое спасибо, чувак, это решило мою проблему. Не думал проверять с помощью wireshark, как профессионал в области информационной безопасности, я разочарован в себе, ха-ха-ха. В любом случае спасибо.