- Shell 83.5%
- Python 16.5%
| Filename | Latest commit message | Latest commit date |
|---|---|---|
| tests | ||
| .gitignore | ||
| LICENSE | ||
| netsp.sh | ||
| README.md | ||
NetSP: Reforged
Network Simple Probe — CLI-инструмент на Bash для проверки доступности хостов и сетевых сервисов. Поддерживает DNS/PTR, ICMP, TCP/UDP, ARP/NDP, измерение задержек, параллельные проверки и экспорт результатов.
NetSP работает с одиночными IP-адресами, DNS-именами, сетями IPv4/IPv6 в формате CIDR и смешанными списками целей. Для сетевых проверок использует доступные системные утилиты и выбирает подходящий backend.
Проект основан на michaell/netsp. Reforged — отдельная ветка развития с акцентом на точность диагностики, надёжность и удобство массовых проверок.
Содержание
- Быстрый старт
- Терминальный интерфейс
- Возможности
- CIDR и списки целей
- Примеры
- Параметры CLI
- Результаты и коды завершения
- Проверка изменений
- Ограничения
- Лицензия
Быстрый старт
Требования: Linux, Bash 4.3+. Для выбранных типов проверок нужны соответствующие системные утилиты (см. ниже). Установка самого NetSP не требуется.
git clone https://git.rootnode.ru/rolincero/netsp-reforged.git
cd netsp-reforged
chmod +x netsp.sh
./netsp.sh -h
Проверка сервера по ICMP и TCP:
./netsp.sh --ping -p 22,443 -t 2 srv-01.example.org
Проверка небольшой сети IPv4:
./netsp.sh --ping -P 16 --no-reverse -n 192.0.2.0/28
Зависимости по назначению:
| Задача | Основные команды | Резервные варианты |
|---|---|---|
| DNS и PTR | dig |
host, getent |
| ICMP | fping |
ping |
| TCP | nmap |
nc (--use-nc для принудительного выбора) |
| UDP | nmap |
nc -u (неоднозначные результаты) |
| ARP/NDP | arping |
ip neigh, arp |
| Вспомогательные операции | coreutils, awk, стандартные системные утилиты |
Зависит от окружения |
На Arch Linux рекомендуемый набор:
sudo pacman -S --needed bash bind nmap fping openbsd-netcat iputils iproute2 coreutils gawk
Это рекомендуемые пакеты, а не обязательные зависимости каждого запуска. Названия пакетов отличаются между дистрибутивами. Отдельные проверки ARP/UDP могут потребовать root или CAP_NET_RAW.
Терминальный интерфейс
В интерактивном терминале NetSP автоматически использует альтернативный экран: во время проверки показывает прогресс по фактически завершённым целям, число online/offline/unknown и последние результаты. После завершения экран закрывается, а итоговая таблица остаётся в обычной истории терминала. Предыдущий вывод не очищается.
# Меню настройки: цель или файл, ICMP, порты, ARP, таймаут, параллельность, DNS
./netsp.sh
# Прогресс для готовой команды (при запуске в TTY)
./netsp.sh --ping -P 16 --no-reverse 192.168.10.0/28
# Принудительное включение TUI / возврат к обычному CLI
./netsp.sh --tui --ping 192.168.10.1
./netsp.sh --no-tui --ping 192.168.10.1
В меню выбирайте пункты 1–9, вводите значения по подсказкам, затем нажмите Enter для запуска или q для выхода. По умолчанию в меню включён ICMP. При Ctrl+C во время диагностики NetSP восстанавливает основной экран и возвращает код 130.
Автоматизация не меняется: если stdout или stdin не является терминалом, установлен TERM=dumb, либо выбран --csv/--json, TUI не включается. Для машинного вывода используются прежние форматы без ANSI-последовательностей. Явный --tui без подходящего терминала или с машинным форматом завершается ошибкой. --no-tui также сохраняет старый построчный ввод EOF при запуске без целей.
TUI использует ANSI, /dev/tty и stty, без dialog, whiptail или других дополнительных UI-зависимостей. Предупреждения о зависимостях выводятся до запуска экрана; во время сканирования таблица формируется после завершения всех задач в исходном порядке.
Возможности
- DNS/PTR: прямое и обратное разрешение; выбор IPv4/IPv6 (
-4/-6); собственный суффикс для коротких имён (--domain). - ICMP: проверка узла через
fpingилиping, настройка количества пакетов и таймаута. - TCP: проверка набора портов через
nmapилиnc. - UDP: проверка через
nmap -sUили резервныйnc -uс учётом неопределённости ответа. - ARP/NDP: проверка в локальном сегменте, опциональное обновление таблицы соседей.
- RTT: измерение задержки доступными методами (
auto,nmap,tcp,ping). - Массовая обработка: входной файл, интерактивное меню, IPv4/IPv6 CIDR, дедупликация и ограниченный параллелизм.
- Экспорт: терминал, CSV (
;), JSONL; сравнение статусов с предыдущим запуском (--diff).
Как определяется статус
| Статус | Смысл |
|---|---|
online |
Выбранная проверка дала положительное подтверждение доступности. |
offline |
Выбранные проверки не дали положительного или неоднозначного результата. |
unknown |
Результат не определён: например, ошибка DNS, неопределённый ответ UDP или режим только DNS. |
Важно: доступность хоста не означает, что конкретный порт или сервис работает. DNS-резолвинг также не доказывает доступности узла.
CIDR и списки целей
IPv4 и IPv6 CIDR разворачиваются в отдельные адреса до начала проверок. Дополнительные утилиты для раскрытия подсетей не нужны.
./netsp.sh --ping 192.168.10.0/30
./netsp.sh --ping -6 2001:db8::/126
Для сети 192.168.10.0/30 проверяются все четыре адреса: .0, .1, .2, .3. Адрес сети и broadcast не исключаются, поскольку NetSP выполняет проверку указанных IP, а не выдаёт список назначаемых хостам адресов. Для /31 и /32 действует то же правило.
Смешанный список targets.txt:
# Серверы и подсети
192.168.10.1
192.168.20.0/29
2001:db8::/126
srv-01.example.org
./netsp.sh -f targets.txt --ping -P 20 -t 2 --json -o results.jsonl
Правила обработки:
- CIDR с адресом внутри сети (например,
192.168.10.5/30) нормализуется до границы сети (192.168.10.4/30). - IPv6-адреса в результате приводятся к сокращённой форме; IPv4-mapped IPv6 записываются в шестнадцатеричном виде.
- Цели из разных строк и диапазонов дедуплицируются после раскрытия (отключается
--no-dedup). - По умолчанию разрешено 4096 входных целей, с учётом всех раскрытых диапазонов до дедупликации.
--max-targets Nувеличивает предел максимум до 65536. - Если предел превышен, CIDR некорректен или семейство сети противоречит
-4/-6, выполнение прерывается до сетевых проверок.
Для крупных сетей выбирайте осмысленный уровень параллелизма (-P) и таймаут (-t). Опция --max-targets управляет количеством целей, а не скоростью их обработки.
Примеры
Только DNS/PTR, без проверки доступности:
./netsp.sh --resolve-only -f targets.txt --json -o dns.jsonl
Проверка TCP/UDP-портов:
./netsp.sh -p 22,80,443 -u 53 -t 2 srv-01.example.org
Проверка локального сегмента через ARP/NDP:
./netsp.sh --arp --arp-refresh -f targets.txt -P 16
Измерение задержек:
./netsp.sh --ping --latency --latency-method ping 192.0.2.1
Массовый вывод в CSV без создания файла по умолчанию:
./netsp.sh --ping -f targets.txt -P 32 --csv -n
Повторная проверка с пометкой изменений статуса:
./netsp.sh --ping -f targets.txt --diff
Параметры CLI
Актуальная справка всегда доступна через ./netsp.sh -h.
| Группа | Параметры | Назначение |
|---|---|---|
| Вход | хост, CIDR, файл, -f ФАЙЛ |
Одна цель, сеть или файл; без аргументов в TTY меню, без TTY построчный ввод до EOF. |
| Проверки | --ping, --arp, --arp-refresh |
ICMP, ARP/NDP и обновление таблицы соседей. |
| Порты | -p ПОРТЫ, -u ПОРТЫ |
TCP и UDP; порты через запятую. |
| Задержки | --latency, --latency-method (auto, nmap, tcp, ping) |
Показ RTT и способ измерения. |
| Таймауты | -t СЕК, --nmap-timeout СЕК, -c N |
Таймауты и число ICMP-пакетов. |
| DNS | --resolve-only, --domain ДОМЕН, --no-default-domain, --no-reverse |
Управление разрешением имён. |
| IP | -4, -6, -I ИНТЕРФЕЙС |
Семейство адресов и сетевой интерфейс. |
| Массовость | -P N, --force-parallel, --delay СЕК |
Параллелизм (обычный максимум 64) и задержка запуска. |
| Цели | --max-targets N, --no-dedup |
Лимит раскрытых целей и отключение дедупликации. |
| Вывод | -o ФАЙЛ, -n, -l ФАЙЛ, --csv, --json, --diff, --tui, --no-tui |
Файл результата, лог, формат, сравнение статусов и управление TUI. |
| Backend | --use-nc |
Использовать nc для TCP вместо предпочтительного nmap. |
| Диагностика | -v, --debug, -h |
Подробные ошибки DNS, отладка, справка. |
Форматы ввода: для имени без точки по умолчанию добавляется встроенный корпоративный DNS-суффикс tn.tngrp.ru. Для работы в другой сети укажите --domain example.org; для отключения автоматической подстановки используйте --no-default-domain (при вводе коротких имён потребуется указать домен). Это унаследованное поведение текущей версии.
Результаты и коды завершения
По умолчанию выводится имя, IP, статус и детали проверок:
srv-01.example.org 192.0.2.10 online ping tcp_open:22/tcp
Результат JSONL (--json):
{"name":"srv-01.example.org","ip":"192.0.2.10","status":"online","details":"ping tcp_open:22/tcp","changed":false}
Результат CSV (--csv, разделитель ;, без заголовка):
srv-01.example.org;192.0.2.10;online;ping tcp_open:22/tcp
Примеры иллюстрируют формат, а не реальный результат проверки. При использовании входного файла без -n программа по умолчанию создаёт файл результатов рядом с запуском; -o позволяет задать путь явно. Лог ошибок разрешения имён по умолчанию: errors.log. Кэш --diff: ${XDG_CACHE_HOME:-$HOME/.cache}/netsp/cache.
| Код | Значение |
|---|---|
0 |
Нет offline/unknown, нет деградации зависимостей. |
1 |
Ошибка параметров или запуска (в том числе некорректный CIDR/превышение лимита). |
2 |
Есть хотя бы одна цель offline. |
3 |
Есть хотя бы одна цель unknown, если не было offline. |
4 |
Использован fallback/degraded backend без offline и unknown. |
При --resolve-only успешно разрешённый адрес в текущей реализации получает деталь resolved, но агрегированный статус unknown, поэтому код завершения может быть 3. Это не означает, что DNS-запрос завершился ошибкой.
Проверка изменений
Наборы регрессионных тестов CIDR и TUI работают локально без сетевых запросов (для TUI используется псевдотерминал и подменённый fping). Для запуска нужен Python 3 только в среде разработки; при выполнении netsp.sh Python не используется.
bash -n netsp.sh
python3 -m unittest discover -s tests -v
Ограничения
- Проверки выполняются только по выбранным механизмам.
offlineне обязательно означает, что устройство выключено: фильтры и ACL могут блокировать ответы. - Результаты UDP, особенно при
nc -u, часто неоднозначны.open|filteredнельзя безоговорочно считать открытым портом. --diffсравнивает агрегированный статус по имени. При--no-reverseIP-адреса могут отображаться с именемunknown, из-за чего сравнение нескольких IP не следует считать надёжным.- Использование
ip neighкак fallback для ARP/NDP может опираться на существующие записи соседей, а не на новый ответ устройства. - Начиная с текущей версии для TCP требуются
nmapилиnc; прежний backend Bash/dev/tcpудалён. - Скрипт рассчитан на Linux и использует Linux-ориентированные команды. Совместимость со всеми Unix-подобными ОС не заявляется.
Лицензия
MIT. Оригинальная реализация: michaell, 2026. Авторские уведомления исходного проекта сохранены.