scapy.srp не дает всем клиентам - PullRequest
1 голос
/ 24 апреля 2020

Я пытаюсь сделать сетевой сканер используя scapy. Но каждый раз, когда я запускаю следующий код, он дает мне другой результат. Иногда это показывает мне двух клиентов, а иногда трех, но всего клиентов 5. Это не дает полного результата. Что не так? Пожалуйста, помогите ..

def scan(ip):
    arp_request = scapy.ARP(pdst=ip)
    broadcast = scapy.Ether(dst="ff:ff:ff:ff:ff:ff")
    arp_request_broadcast = broadcast/arp_request
    answered , unanswered = scapy.srp(arp_request_broadcast,timeout=1)
    print(answered.summary())

scan("192.168.0.1/24")

1 Ответ

0 голосов
/ 24 апреля 2020

Проблема в том, что ваш тайм-аут слишком мал. В настоящее время установлено значение 1, поэтому в данный момент вы не ждете ответов. Вместо этого вы можете использовать встроенную программу scapy arping , чтобы выполнить сканирование arp.

Вы можете изменить свой код для итерации, пока не найдете время ожидания, которое выдает наибольшее количество ответов:

import scapy.all as scapy

def scan(subnet):
    i = 0
    prev = 0
    while True:
        i+=1
        ans, unans = scapy.arping(subnet, timeout=i, verbose=0)
        num_responses = len(ans)
        print("Got {} responses in {} seconds".format(num_responses, i))
        if num_responses > prev:
            prev = num_responses
        else:
            break
    print("You should set your timeout to {} seconds".format(i-1))

scan("192.168.0.0/24")

Запустив это, мы видим, что 4 секунды - это хороший тайм-аут для моей локальной сети (т. Е. Ваша может отличаться):

$ sudo python3 arping.py
Got 3 responses in 1 seconds
Got 6 responses in 2 seconds
Got 18 responses in 3 seconds
Got 19 responses in 4 seconds
Got 18 responses in 5 seconds
You should set your timeout to 4 seconds
...