Различия в ARP-сканировании macOS / Raspbian / Python результаты - PullRequest
0 голосов
/ 10 апреля 2020

С помощью некоторых руководств я написал сценарий 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 их не обнаруживает.

1 Ответ

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

Я на самом деле обнаружил, что могу получить даже устройства iOS и устройства Arduino, когда я могу увеличить время ожидания (например, до 15). Это все еще намного медленнее, чем macOS (arp -a дает мгновенный ответ), но они, вероятно, извлекают его из некоторого кэша или чего-то еще (?). Он производит все устройства, которые я вижу в arp -a, также из кода Python, хотя тогда он становится очень медленным.

...