1. Почему передаем адрес первого узла сети. Ну, логично же, что мы сканируем всю сеть, то есть все ip адреса, а следовательно, нужно начать с самого первого. Но, я немного поэкспериментировал и, если не ошибаюсь, передать можно просто локальный адрес и маску. А scapy сам прошерстит нужный диапазон.
2. srp и arping по большому счету, наверное ничем. Что от одного, что от другого, ответы одинаковые.
Посмотреть вложение 60583
3. По поводу доступа к элементам. Обратите внимание, что прилетает в ответ кортеж из двух частей. То есть, чтобы обратиться к одной из них, надо указать индекс. Соответственно, пишем:
Посмотреть вложение 60580
И указываем то, что вам нужно получить.
Ответ состоит также из двух частей. То есть отвеченных адресов и не отвеченных. Потому d и n. Можно убрать лишнюю переменную и записать так:
Python:
import scapy.all as sc
d = sc.arping("192.168.42.1/24", verbose=False)[0]
for i in d:
print(i[1].hwsrc)
Посмотреть вложение 60581
Соответственно, если вы наберете вместо .hwsrc .show() вы увидите, что можно еще оттуда вытащить. Ну или можно так глянуть, распечатав элемент. А можно без цикла, вот так:
Python:
import scapy.all as sc
d = sc.arping("192.168.42.1/24", verbose=False)[0]
print(d[0][1].hwsrc)
4. Насчет разного количества устройства в сети, точно не знаю. Тут могу только предположить. Уже вроде где-то натыкался на такой вопрос, что сканер не видит мобильные устройства. Так вот, скорее всего так происходит потому, что телефоны и прочие мобильные устройства находятся в сети не постоянно, а периодически делают запросы на обновление. А потому, подключение тоже может быть не постоянным. Возможно, поэтому.