
Однопакетный UDP-сканер на Go для быстрого обнаружения 45+ сервисов в сетях, поддерживающий пользовательские пробы, сканирование CIDR и вывод в JSONL.

Быстрый и легковесный сканер UDP на одном пакете, написанный на Go, который поддерживает обнаружение более 45 сервисов с возможностью добавления собственных. Он прост в использовании и портативен, может работать на Linux, Mac OS и Windows. В отличие от интернет-сканеров, таких как zgrab2 и zmap, UDPX разработан для портативности и простоты использования.
Сканирование UDP-портов сильно отличается от сканирования TCP — вы можете получить ответ от зондирования UDP-порта, а можете и не получить, так как UDP — это протокол без установления соединения. UDPX реализует подход на основе одного пакета. Пакет, специфичный для протокола, отправляется на определённый сервис (порт) и ожидает ответа. По умолчанию лимит установлен в 500 мс и может быть изменён флагом -w. Если сервис отправляет пакет обратно в течение этого времени, то он точно прослушивает этот порт и считается открытым.
Типичная техника заключается в отправке UDP-пакетов нулевой длины на каждый порт целевой машины. Если мы получаем сообщение «ICMP Port Unreachable», порт закрыт. Если получен UDP-ответ на пробу (необычно), порт открыт. Если ответа вообще нет, состояние считается открытым или фильтруемым, то есть порт либо открыт, либо пакетные фильтры блокируют общение. Этот метод не реализован, так как не даёт дополнительной ценности (UDPX тестирует только определённые протоколы).

⚠️ Параллелизм: По умолчанию параллелизм установлен только на 32 соединения (чтобы вы ничего не обрушили). Если у вас много хостов для сканирования, вы можете установить его на 128 или 256 соединений. В зависимости от вашего оборудования, стабильности соединения и ulimit (на *nix) вы можете запустить 512 или более одновременных соединений, но это не рекомендуется.
Чтобы отсканировать один IP:
udpx -t 1.1.1.1
Чтобы отсканировать CIDR с максимумом 128 соединений и тайм-аутом 1000 мс:
udpx -t 1.2.3.4/24 -c 128 -w 1000
Чтобы отсканировать цели из файла с максимумом 128 соединений только для определённого сервиса:
udpx -tf targets.txt -c 128 -s ipmi
Целью может быть:
Поддерживается IPv6.
Если вы хотите сохранить результаты, используйте флаг -o [filename]. Вывод в формате JSONL, как показано ниже:
{"address":"45.33.32.156","hostname":"scanme.nmap.org","port":123,"service":"ntp","response_data":"JAME6QAAAEoAAA56LU9vp+d2ZPwOYIyDxU8jS3GxUvM="}
__ ______ ____ _ __
/ / / / __ \/ __ \ |/ /
/ / / / / / / /_/ / /
/ /_/ / /_/ / ____/ |
\____/_____/_/ /_/|_|
v1.0.2-beta, by @nullt3r
Использование: ./udpx-linux-amd64:
-c int
Максимальное количество одновременных соединений (по умолчанию 32)
-nr
Не рандомизировать адреса
-o string
Выходной файл для записи результатов
-s string
Сканировать только определённый сервис, один из: ard, bacnet, bacnet_rpm, chargen, citrix, coap, db, db, digi1, digi2, digi3, dns, ipmi, ldap, mdns, memcache, mssql, nat_port_mapping, natpmp, netbios, netis, ntp, ntp_monlist, openvpn, pca_nq, pca_st, pcanywhere, portmap, qotd, rdp, ripv, sentinel, sip, snmp1, snmp2, snmp3, ssdp, tftp, ubiquiti, ubiquiti_discovery_v1, ubiquiti_discovery_v2, upnp, valve, wdbrpc, wsd, wsd_malformed, xdmcp, kerberos, ike
-sp
Показывать полученные пакеты (только первые 32 байта)
-t string
IP/CIDR для сканирования
-tf string
Файл, содержащий IP/CIDR для сканирования
-w int
Максимальное время ожидания ответа (тайм-аут сокета) в мс (по умолчанию 500)
Вы можете скачать готовые бинарники в разделе релизов. Если вы хотите собрать UDPX из исходников, выполните следующие шаги:
Из git:
git clone https://github.com/nullt3r/udpx
cd udpx
go build ./cmd/udpx
Бинарник будет в текущем каталоге.
Или через go:
go install -v github.com/nullt3r/udpx/cmd/udpx@latest
После этого бинарник можно найти в $HOME/go/bin/udpx. При желании переместите бинарник в /usr/local/bin/, чтобы вызывать его напрямую.
UDPX поддерживает более 45 сервисов. Наиболее интересные:
Полный список поддерживаемых сервисов:
Пожалуйста, отправьте запрос на добавление функции с названием протокола и портом, и я реализую это. Или добавьте самостоятельно, файл pkg/probes/probes.go содержит все доступные полезные нагрузки. Укажите название протокола, порт и данные пакета (в шестнадцатеричной кодировке).
{
Name: "ike",
Payloads: []string{"5b5e64c03e99b51100000000000000000110020000000000000001500000013400000001000000010000012801010008030000240101"},
Port: []int{500, 4500},
},
Я не несу ответственности за любой ущерб. Вы несёте ответственность за свои действия. Сканирование или атака целей без предварительного взаимного согласия может быть незаконной.
UDPX распространяется под лицензией MIT.