Проблема в том, что ваш тайм-аут слишком мал. В настоящее время установлено значение 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