
Utilidad para anotar conjuntos de datos de Internet con metadatos contextuales (p. ej., AS de origen, MaxMind GeoIP2, DNS inverso y WHOIS)
ZAnnotate es una utilidad en Go que facilita anotar grandes conjuntos de datos de IP con metadatos de red. Actualmente esto incluye:
| CLI Flag | Descripción | Requiere API Key | Requiere descarga de datos |
|---|---|---|---|
--censys | Inteligencia de internet de Censys (API en vivo) | Sí | |
--cymru | ASN de origen/par y detalles de ASN de Cymru | ||
--geoasn | Datos de ASN de MaxMind GeoIP | Sí | |
--geoip2 | Datos de ciudad y geolocalización de MaxMind GeoIP2 | Sí | |
--greynoise | Inteligencia de amenazas y datos de CVE de GreyNoise Psychic | Sí (para descargar) | Sí |
--ipinfo | Datos de ASN y geolocalización de IPInfo.io | Sí | |
--rdap | Consultas RDAP (sucesor de WHOIS) (en vivo) | ||
--rdns | Consultas de DNS inverso (en vivo) | ||
--routing | Datos de BGP/enrutamiento de una tabla de enrutamiento MRT | Sí | |
--spur | Spur Intelligence (ASN, organización, clasificación de infraestructura, geolocalización) | Sí |
Ir a la configuración de los módulos: Censys · Cymru · GeoASN · GeoIP · GreyNoise · IPInfo.io · RDAP · RDNS/DNS inverso · Enrutamiento/BGP · Spur
Puedes usar cualquier combinación de anotadores; por ejemplo, aquí tienes anotaciones de DNS inverso e IPInfo juntas:
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"]}
}
El --help tiene más detalles sobre cada anotador y sus flags disponibles.
zannotate --help
ZAnnotate puede instalarse usando make install
make install
o, si no tienes make instalado, puedes usar el siguiente comando:
cd cmd/zannotate && go install
En cualquier caso, esto instalará el binario zannotate en tu directorio $GOPATH/bin.
Comprueba que se instaló correctamente con:
zannotate --help
Por defecto, ZAnnotate espera direcciones IP delimitadas por nueva línea en la entrada estándar. Por ejemplo:
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"]}}
Puede que quieras anotar datos que ya están en formato JSON. En ese caso, tendrás que usar el flag --input-file-type=json.
Esto insertará un campo zannotate en el objeto JSON existente. Por ejemplo:
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"]}}}
Si tus objetos JSON tienen un campo distinto al ip por defecto para la dirección IP, puedes especificarlo con el flag --input-ip-field. Por ejemplo, si tus objetos JSON tienen un campo ip_address, puedes usar:
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"]}}}
Si tus datos de entrada están en formato CSV, puedes usar el flag --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"]}}}
Al igual que con JSON, puedes usar el flag --input-ip-field para especificar una columna distinta de ip que contenga la dirección 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"}
Por defecto, ZAnnotate lee direcciones IP delimitadas por nueva línea desde la entrada estándar y genera un objeto JSON por línea en la salida estándar, como:
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"]}}
Si una dirección IP no puede ser anotada, ya sea por un error o por falta de datos, habrá un campo vacío para esa anotación. Por ejemplo, si una dirección IP es privada y, por lo tanto, no tiene datos de RDNS ni de ASN, la salida tendrá este aspecto:
echo "127.0.0.1" | zannotate --rdns --geoasn --geoasn-database=/path-to-geo-asn.mmdb
{"geoasn":{},"rdns":{},"ip":"127.0.0.1"}
El flag --output-annotation-field se puede usar para especificar un nombre de campo distinto para las anotaciones, en lugar de zannotate, tanto para entradas de archivos CSV como JSON.
Por ejemplo, usando la etiqueta de salida --output-annotation-field="info" con entrada 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] Las URLs y las instrucciones pueden cambiar con el tiempo. Estas están actualizadas a fecha de mayo de 2026.
Censys proporciona datos de hosts y redes a nivel de internet, incluida información sobre qué servicios se están ejecutando en una IP, qué certificados TLS tiene y más. Ofrecen un plan gratuito que permite un número limitado de consultas al mes, que puede usarse para enriquecer las anotaciones de IP con datos de Censys.