Популяция ARP из скрипта Python не работает - PullRequest
0 голосов
/ 11 марта 2019

Я пытаюсь получить IP-адрес устройства в моей сети (из которых я знаю MAC), заполнив кэш ARP и прочитав из него:

def getIP(mac):
    os.system("nmap -sP 192.168.1.0/24 >/dev/null")
    ip_line = sub.getoutput("ip n | grep "+ mac)
    if ip_line == '':
        return ''
    else:
        return ip_line.split()[0]

Команда, которая вызывает nmap, похоже, не заполняет кэш arp, поскольку она остается пустой. Когда я выполняю команду nmap вручную, она работает.

Я уже пытался заменить os.system на

cp = sub.run(["nmap", "-sP", "192.168.1.0/24", ">/dev/null"])

Хотя это не имеет значения.

1 Ответ

0 голосов
/ 12 марта 2019

Проблема даже не имела ничего общего с кодом Python.

nmap -sP обычно отправляет ICMP-эхо-запросы всем IP-адресам в указанной сети. Есть одно исключение, упомянутое в документации:

Когда привилегированный пользователь пытается сканировать цели в локальной сети Ethernet, запросы ARP> используются, если не указан параметр --send-ip.

Это также приводит к тому, что всякий раз, когда команда отправляется как sudo (как в моем случае), кэш ARP не заполняется, пока не добавляется --send-ip.

...