Как я могу использовать nmap, чтобы увидеть, активны ли адреса в подсети или нет с помощью Python

Я знаю, что nmap имеет возможность пинговать и выводить список только активных IP-адресов, но я просматриваю сеть, чтобы выяснить, как составить список того, активен ли IP-адрес с использованием нотации CIDR. (т.е. для списка 1.1.1.1/32, если адреса активны или неактивны). Я также изучал netaddr и scapy, но я не понимаю, как бы я это сделал. Я пытаюсь сделать это с помощью сценария Python.

Спасибо

2 ответа

Похоже, что есть библиотека с открытым исходным кодом, называемая python-iptools, которая имеет возможность конвертировать нотацию CIDR в диапазон IP.

Лучшим вариантом для этого на Python будет использование Scapy. Вы можете легко создать пакет ping (ICMP Echo Request), установить его назначение в диапазоне CIDR, а затем "отправить" его, который будет последовательно отправляться на каждый адрес в диапазоне:

>>> p = IP(dst="10.0.0.0/30") / ICMP()
>>> sr(p,timeout=5)
Begin emission:
Finished to send 4 packets.
**..................
Received 20 packets, got 2 answers, remaining 2 packets
(<Results: TCP:0 UDP:0 ICMP:2 Other:0>, <Unanswered: TCP:0 UDP:0 ICMP:2 Other:0>)

Получение выходных данных sr Функция (или любой другой метод, который вы выберете для отправки пакетов) остается за вами. Альтернативой для получения адресов (оставляя генерацию пакетов до вас) будет использование ipaddr библиотека, которая имеет IPv4Network объект, который может перебирать сеть CIDR.

Наконец, я обязан указать, что Nmap может принимать целевые спецификации в формате CIDR (например, 192.168.1.0/24, example.com/26, 10.0.0.0/8, так далее.)

Другие вопросы по тегам