ARP-пакеты с scapy остаются без ответа

#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, чтобы посмотреть, что происходит (первое, что вы должны сделать, когда происходит что-то подобное), вы можете увидеть, что это не то, что вы ожидаете:

Строка Wireshark

По сути, это искаженный пакет. Вам нужно broadcast / arp_request ; хотя указывать Ether слой необязательно. Вы можете использовать просто ARP sr ).

Используйте Wireshark. Это бесценный инструмент. Вы должны запускать его только в сетях, которые вы контролируете / разрешаете отслеживать, но это действительно необходимо.

Комментарии:

1. Большое спасибо, чувак, это решило мою проблему. Не думал проверять с помощью wireshark, как профессионал в области информационной безопасности, я разочарован в себе, ха-ха-ха. В любом случае спасибо.