
Утилита для аннотирования интернет-датасетов контекстными метаданными (например, AS происхождения, MaxMind GeoIP2, обратный DNS и WHOIS).
ZAnnotate — это утилита на Go, которая упрощает аннотирование больших наборов IP-адресов с метаданными сети. В настоящее время включает:
| CLI Flag | Description | Needs API Key | Needs Data Download |
|---|---|---|---|
--censys | Интернет-разведка Censys (живой API) | Да | |
--cymru | Данные об исходных/пиринговых ASN и деталях ASN от Cymru | ||
--geoasn | Данные MaxMind GeoIP ASN | Да | |
--geoip2 | Данные MaxMind GeoIP2 о городе и геолокации | Да | |
--greynoise | Данные GreyNoise Psychic об угрозах и CVE | Да (для загрузки) | Да |
--ipinfo | Данные IPInfo.io об ASN и геолокации | Да | |
--rdap | Запросы RDAP (преемник WHOIS) (живые) | ||
--rdns | Обратные DNS-запросы (живые) | ||
--routing | Данные BGP/маршрутизации из таблицы маршрутизации MRT | Да | |
--spur | Spur Intelligence (ASN, организация, классификация инфраструктуры, геолокация) | Да |
Перейти к настройке модулей: Censys · Cymru · GeoASN · GeoIP · GreyNoise · IPInfo.io · RDAP · RDNS/Reverse DNS · Routing/BGP · Spur
Вы можете использовать любую комбинацию аннотаторов, например, ниже показаны обратный DNS и аннотации IPInfo вместе:
echo "1.1.1.1" | zannotate --rdns --ipinfo --ipinfo-database=./data-snapshots/ipinfo_lite.mmdb
{
"ip":"1.1.1.1",
"ipinfo":{"country":"Australia","country_code":"AU","continent":"Oceania","continent_code":"OC","asn":"AS13335","as_name":"Cloudflare, Inc.","as_domain":"cloudflare.com"},
"rdns":{"domain_names":["one.one.one.one"]}
}
В --help приведены подробные сведения о каждом аннотаторе и доступных флагах.
zannotate --help
ZAnnotate можно установить с помощью make install
make install
или, если у вас не установлен make, вы можете использовать следующую команду:
cd cmd/zannotate && go install
В любом случае, это установит бинарный файл zannotate в ваш каталог $GOPATH/bin.
Проверьте, что он установлен правильно, с помощью:
zannotate --help
По умолчанию ZAnnotate ожидает IP-адреса, разделенные переводами строк, на стандартном вводе. Например:
printf "1.1.1.1\n8.8.8.8" | zannotate --rdns
{"ip":"1.1.1.1","rdns":{"domain_names":["one.one.one.one"]}}
{"ip":"8.8.8.8","rdns":{"domain_names":["dns.google"]}}
Возможно, вы захотите аннотировать данные, которые уже находятся в формате JSON. В этом случае вам нужно использовать флаг --input-file-type=json.
Это добавит поле zannotate в существующий JSON-объект. Например:
echo '{"ip": "1.1.1.1"}' | zannotate --rdns --geoasn --geoasn-database=/path-to-geo-asn.mmdb --input-file-type=json
{"ip":"1.1.1.1","zannotate":{"geoasn":{"asn":13335,"org":"CLOUDFLARENET"},"rdns":{"domain_names":["one.one.one.one"]}}}
Если ваши JSON-объекты имеют другое поле для IP-адреса, отличное от стандартного ip, вы можете указать его с помощью флага --input-ip-field. Например, если ваши JSON-объекты содержат ip_address, вы можете использовать:
echo '{"ip_address": "1.1.1.1"}' | zannotate --rdns --input-file-type=json --input-ip-field=ip_address
{"ip_address":"1.1.1.1","zannotate":{"rdns":{"domain_names":["one.one.one.one"]}}}
Если ваши входные данные находятся в формате CSV, вы можете использовать флаг --input-file-type=csv.
printf "name,ip,date\n cloudflare,1.1.1.1,04-04-26\n google,8.8.8.8,04-04-26" | zannotate --rdns --input-file-type=csv
{"name":" cloudflare","ip":"1.1.1.1","date":"04-04-26","zannotate":{"rdns":{"domain_names":["one.one.one.one"]}}}
{"name":" google","ip":"8.8.8.8","date":"04-04-26","zannotate":{"rdns":{"domain_names":["dns.google"]}}}
Как и в случае с JSON, вы можете использовать флаг --input-ip-field, чтобы указать столбец, отличный от ip, содержащий IP-адрес.
printf "name,ip_address,date\n cloudflare,1.1.1.1,04-04-26\n google,8.8.8.8,04-04-26" | zannotate --rdns --input-file-type=csv --input-ip-field=ip_address
{"date":"04-04-26","zannotate":{"rdns":{"domain_names":["dns.google"]}},"name":" google","ip_address":"8.8.8.8"}
{"date":"04-04-26","zannotate":{"rdns":{"domain_names":["one.one.one.one"]}},"name":" cloudflare","ip_address":"1.1.1.1"}
По умолчанию ZAnnotate читает IP-адреса, разделенные переводами строк, со стандартного ввода и выводит JSON-объект на каждую строку в стандартный вывод, например:
echo "1.1.1.1" | zannotate --rdns --geoasn --geoasn-database=/path-to-geo-asn.mmdb
{"ip":"1.1.1.1","geoasn":{"asn":13335,"org":"CLOUDFLARENET"},"rdns":{"domain_names":["one.one.one.one"]}}
Если IP-адрес не может быть аннотирован из-за ошибки или отсутствия данных, для этой аннотации будет пустое поле. Например, если IP-адрес является частным и поэтому не имеет данных RDNS или ASN, вывод будет выглядеть так:
echo "127.0.0.1" | zannotate --rdns --geoasn --geoasn-database=/path-to-geo-asn.mmdb
{"geoasn":{},"rdns":{},"ip":"127.0.0.1"}
Флаг --output-annotation-field можно использовать для указания другого имени поля для аннотаций вместо zannotate как для CSV, так и для JSON файловых входов.
Например, использование тега вывода --output-annotation-field="info" с JSON-входом:
printf "name,ip_address,date\n cloudflare,1.1.1.1,04-04-26\n google,8.8.8.8,04-04-26" | zannotate --rdns --input-file-type=csv --input-ip-field=ip_address --output-annotation-field="info"
{"name":" cloudflare","ip_address":"1.1.1.1","date":"04-04-26","info":{"rdns":{"domain_names":["one.one.one.one"]}}}
{"ip_address":"8.8.8.8","date":"04-04-26","info":{"rdns":{"domain_names":["dns.google"]}},"name":" google"}
[!NOTE] URL-адреса и инструкции могут меняться со временем. Они актуальны на май 2026 года.
Censys предоставляет данные об узлах и сети по всему интернету, включая информацию о том, какие службы работают на IP-адресе, какие TLS-сертификаты он имеет и многое другое. У них есть бесплатный тариф, который позволяет выполнять ограниченное количество запросов в месяц; его можно использовать для обогащения аннотаций IP-адресов данными Censys.