ZMap - это быстрый сетевой сканер с открытым исходным кодом, предназначенный для исследования сети в масштабах всего Интернета. На обычном настольном компьютере с гигабитным Ethernet-подключением ZMap способен просканировать все публичное пространство адресов IPv4 менее чем за 45 минут.
В то время как предыдущие сетевые инструменты были разработаны для сканирования небольших сегментов сети, ZMap специально спроектирован для сканирования всего адресного пространства. Он построен по модульному принципу, что позволяет использовать его с другими инструментами для исследования сети. ZMap работает под GNU/Linux и поддерживает сканирование TCP SYN и эхо-запросов ICMP "из коробки".
ZMap является типичным "async/syn-cookie" сканером, как scanrand, Unicornscan и masscan.
Хотя ZMap является мощным инструментом для исследователей, имейте в виду, что, запуская ZMap, вы потенциально сканируете ВСЕ адресное пространство IPv4, и некоторые пользователи могут не оценить ваше сканирование. Мы призываем пользователей ZMap уважать просьбы о прекращении сканирования и исключить эти сети из текущего сканирования.
Мы рекомендуем пользователям согласовывать свои действия с администраторами локальных сетей перед проведением сканирования, и мы разработали набор лучших практик сканирования, которые мы рекомендуем рассмотреть исследователям. Само собой разумеется, что исследователи должны воздерживаться от использования уязвимостей или доступа к защищенным ресурсам, а также соблюдать любые специальные юридические требования в своей юрисдикции.
Лучшие практики сканирования
- Тесная координация с администраторами локальной сети для снижения рисков и обработки запросов
- Убедитесь, что сканирование не перегрузит локальную сеть или провайдера.
- Сигнализируйте о доброкачественном характере сканирования на веб-страницах и в DNS-записях исходных адресов
- Четко объяснять цель и объем сканирования во всех сообщениях.
- Предоставить простой способ отказа от сканирования и оперативно удовлетворять запросы
- Проводить сканирование не чаще и не чаще, чем это необходимо для достижения целей исследования
- Распределяйте трафик сканирования по времени или по адресам источников, если это возможно.
Установка zmap
Установка пакета
1 | sudo apt install zmap |
Установка zmap из исходников
Установка пакетов, необходимых для сборки
1 2 | sudo apt update sudo apt-get install build-essential cmake libgmp3-dev gengetopt libpcap-dev flex byacc libjson-c-dev pkg-config libunistring-dev git |
Создаем рабочую директорию и переходим в нее
1 2 | mkdir work cd work |
Клонируем репозиторий
1 | git clone https://github.com/zmap/zmap.git |
Далее переходим в директорию zmap и собираем
1 2 3 | cd zmap cmake . make -j4 |
По окончанию сборки, устанавливаем zmap
1 | sudo make install |
Проверьте версию zmap, что бы убедиться что установка прошла успешно
1 | zmap -V |
Параметры командной строки zmap
- -p, --target-port=номер порта для сканирования (для TCP и UDP сканирования)
- -o, --output-file=имя Выходной файл
- -b, --blocklist-file=путь Файл подсетей для исключения, в нотации CIDR, например, 192.168.0.0/16
- -w, --allowlist-file=path Файл подсетей для ограничения сканирования, в CIDR нотации, например, 192.168.0.0/16
- -I, --list-of-ips-file=path Список отдельных адресов для сканирования в произвольном порядке. Используйте --white-list-файл, если не требуется >1 миллион IP-адресов
- -r, --rate=pps Установить скорость отправки в пакетах/сек.
- -B, --bandwidth=bps Установить скорость передачи в битах/секунду (поддерживает суффиксы G, M и K)
- --batch=pps Устанавливает количество пакетов для отправки за итерацию
- -n, --max-targets=n Максимальное количество целей для зондирования (в виде числа или процент от адресного пространства)
- -t, --max-runtime=secs Максимальное время отправки пакетов
- -N, --max-results=n Максимальное количество возвращаемых результатов
- -P, --probes=n Количество зондов для отправки на каждый IP-адрес (по умолчанию=`1')
- -c, --cooldown-time=secs Сколько времени продолжать прием после отправки последнего зонда (по умолчанию 8)
- -e, --seed=n Семя, используемое для выбора перестановки адресов
- --retries=n Максимальное количество попыток отправить пакет, если отправка не удалась (по умолчанию=`10')
- -d, --dryrun Не отправлять пакеты.
- --shards=N Задать общее количество шардов (по умолчанию=1)
- --shard=n Установить, на какой шард производится сканирование (0 индексированный) (по умолчанию=0)
- -s, --source-port=port|range Исходный порт(ы) для пакетов сканирования
- -S, --source-ip=ip|range Адрес(ы) источника для пакетов сканирования
- -G, --gateway-mac=addr Указать MAC-адрес шлюза
- --source-mac=addr MAC-адрес источника
- -i, --interface=name Укажите сетевой интерфейс для использования
- -X, --iplayer Отправляет IP-пакеты вместо Ethernet (для VPN).
- -M, --probe-module=name Выберите модуль зондирования (по умолчанию=`tcp_synscan`)
- --probe-args=args Аргументы для передачи в модуль зондирования
- --probe-ttl=n Установить значение TTL для IP-пакетов зонда (по умолчанию=255)
- --list-probe-modules Список доступных модулей зондирования
- -f, --output-fields=fields Поля, которые должны быть выведены в наборе результатов.
- -O, --output-module=name Выбрать модуль вывода
- --output-args=args Аргументы для передачи в модуль вывода
- --output-filter=filter Укажите фильтр по полям ответа, чтобы ограничить количество ответов, отправляемых в модуль вывода модуль
- --list-output-modules Список доступных модулей вывода
- --list-output-fields Список всех полей, которые могут быть выведены выбранным модулем вывода модуль зонда
- --no-header-row Предотвращает вывод любых строк заголовков в данных. (например, заголовки CSV).
- -v, --verbosity=n Уровень детализации журнала (0-5) (по умолчанию=3)
- -l, --log-file=name Запись записей журнала в файл
- -L, --log-directory=директория Запись записей журнала в файл с временной меткой в этой каталоге
- -m, --metadata-file=name Выходной файл для метаданных сканирования (JSON)
- -u, --status-updates-file=name Запись обновлений хода сканирования в CSV-файл
- -q, --quiet Не печатать обновления статуса
- --disable-syslog Отключает запись сообщений в syslog
- --notes=notes Вставлять указанные пользователем примечания в метаданные сканирования
- --user-metadata=json Вставлять указанные пользователем метаданные JSON в метаданные сканирования метаданные
- -C, --config=filename Чтение конфигурационного файла, в котором могут быть указаны любой из этих параметров (по умолчанию=/etc/zmap/zmap.conf)
- --max-sendto-failures=n Максимальное количество отказов NIC sendto перед тем, как сканирование будет прервано (по умолчанию=-1)
- --min-hitrate=n Минимальный хитрейт, который сканирование может достигнуть до того, как сканирование будет прервано (по умолчанию=0.0)
- -T, --sender-threads=n Потоки, используемые для отправки пакетов (по умолчанию=1)
- --cores=STRING Список ядер, разделенных запятыми, для привязки к ним
- --ignore-blocklist-errors Игнорировать недопустимые записи в разрешающем/блокирующем списке файл.
- -h, --help Вывести справку и выйти из программы
- -V, --version Вывести версию
Использование
1 2 | zmap --bandwidth=10M --target-port=80 --max-targets=10000 --output-file=results.csv |