С помощью некоторых руководств я написал сценарий Python, в котором перечислены сетевые сведения об устройствах в сети.
Однако я обнаруживаю только определенные устройства, только если запускаю сценарий Python. Я уже видел при поиске, что определенные устройства (например, iOS устройства) не отвечают (но иногда обнаруживаются), но странная вещь:
- macOS (Catalina, 10.15.2) делает найти эти устройства с помощью «arp -a»
- Raspbian (10, buster) также находит несколько устройств при выполнении «arp -a», но не находит iOS devices
- Python (3 / 2.7) не находит устройства Arduino, которые обнаруживают Raspbian и macOS, я запускаю скрипт Python из ma c.
- Запуск скрипта Python на Pi делает дайте мне устройства Arduino.
Я использую Scapy для сообщений ARP в Python (на основе этого урока: https://www.thepythoncode.com/article/building-network-scanner-using-scapy):
def find_devices(gateway):
_ip_items = gateway.split(".")
target_ip = "%s.%s.%s.%s" % (_ip_items[0], _ip_items[1], _ip_items[2], "0/24")
# IP Address for the destination
# create ARP packet
arp = ARP(pdst=target_ip)
# create the Ether broadcast packet
# ff:ff:ff:ff:ff:ff MAC address indicates broadcasting
ether = Ether(dst="ff:ff:ff:ff:ff:ff")
# stack them
packet = ether/arp
result = srp(packet, timeout=3, verbose=0)[0]
# a list of clients, we will fill this in the upcoming loop
clients = []
for sent, received in result:
# for each response, append ip and mac address to `clients` list
clients.append({'ip': received.psrc, 'mac': received.hwsrc})
print("{:16} {}".format(received.psrc, received.hwsrc))
Конечно, я мог бы использовать ARP -A напрямую (например, выполнить это из Python и проанализировать результаты), но мне гораздо более любопытно, почему Raspberry Pi, похоже, обнаруживает больше устройств, чем Python код и macOS обнаруживают еще больше (они обманывают и, например, используют Bonjour?), но как же оба отыщите Arduino (Nano 33 IoT-платы с надписью / кодом MQTT на них), в то время как скрипт в macOS их не обнаруживает.