
Dienstprogramm zum Annotieren von Internet-Datensätzen mit kontextuellen Metadaten (z.B. Origin AS, MaxMind GeoIP2, Reverse-DNS und WHOIS)
ZAnnotate ist ein Go-Dienstprogramm, das die Annotation großer IP-Datensätze mit Netzwerkmetadaten erleichtert. Derzeit umfasst dies:
| CLI-Flag | Beschreibung | Benötigt API-Schlüssel | Benötigt Daten-Download |
|---|---|---|---|
--censys | Censys Internet-Intelligenz (Live-API) | Ja | |
--cymru | Cymru IP-Ursprungs-/Peer-ASN und ASN-Details | ||
--geoasn | MaxMind GeoIP ASN-Daten | Ja | |
--geoip2 | MaxMind GeoIP2 Stadt- und Geolokalisierungsdaten | Ja | |
--greynoise | GreyNoise Psychic-Bedrohungsintelligenz und CVE-Daten | Ja (zum Herunterladen) | Ja |
--ipinfo | IPInfo.io ASN- und Geolokalisierungsdaten | Ja | |
--rdap | RDAP (WHOIS-Nachfolger) - Live-Abfragen | ||
--rdns | Reverse-DNS-Abfragen (live) | ||
--routing | BGP/Routing-Daten aus einer MRT-Routing-Tabelle | Ja | |
--spur | Spur-Intelligenz (ASN, Organisation, Infrastrukturklassifikation, Geolokalisierung) | Ja |
Springe zur Modul-Einrichtung: Censys · Cymru · GeoASN · GeoIP · GreyNoise · IPInfo.io · RDAP · RDNS/Reverse DNS · Routing/BGP · Spur
Sie können jede beliebige Kombination der Annotatoren verwenden, hier ist zum Beispiel eine Kombination aus Reverse-DNS- und IPInfo-Annotationen:
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 enthält weitere Details zu jedem Annotator und seinen verfügbaren Flags.
zannotate --help
ZAnnotate kann mit make install installiert werden:
make install
Oder, falls make nicht installiert ist, können Sie den folgenden Befehl verwenden:
cd cmd/zannotate && go install
In beiden Fällen wird die Binärdatei zannotate in Ihrem $GOPATH/bin-Verzeichnis installiert.
Überprüfen Sie die korrekte Installation mit:
zannotate --help
Standardmäßig erwartet ZAnnotate zeilenweise getrennte IP-Adressen auf der Standardeingabe. Zum Beispiel:
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"]}}
Möglicherweise möchten Sie Daten annotieren, die bereits im JSON-Format vorliegen. Verwenden Sie dann das Flag --input-file-type=json. Dadurch wird ein zannotate-Feld in das vorhandene JSON-Objekt eingefügt. Zum Beispiel:
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"]}}}
Wenn Ihre JSON-Objekte ein anderes Feld für die IP-Adresse als das Standardfeld ip haben, können Sie dies mit dem Flag --input-ip-field angeben. Wenn Ihre JSON-Objekte beispielsweise ein ip_address-Feld haben, können Sie Folgendes verwenden:
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"]}}}
Wenn Ihre Eingabedaten im CSV-Format vorliegen, können Sie das Flag --input-file-type=csv verwenden.
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"]}}}
Analog zu JSON können Sie das Flag --input-ip-field verwenden, um eine andere Spalte als ip anzugeben, die die IP-Adresse enthält.
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"}
Standardmäßig liest ZAnnotate zeilenweise getrennte IP-Adressen von der Standardeingabe und gibt für jede Zeile ein JSON-Objekt auf der Standardausgabe aus, wie hier:
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"]}}
Wenn eine IP-Adresse nicht annotiert werden kann, sei es aufgrund eines Fehlers oder fehlender Daten, erscheint für diese Annotation ein leeres Feld. Wenn eine IP-Adresse beispielsweise privat ist und daher keine RDNS- oder ASN-Daten hat, sieht die Ausgabe wie folgt aus:
echo "127.0.0.1" | zannotate --rdns --geoasn --geoasn-database=/path-to-geo-asn.mmdb
{"geoasn":{},"rdns":{},"ip":"127.0.0.1"}
Das Flag --output-annotation-field kann verwendet werden, um einen anderen Feldnamen für die Annotationen anstelle von zannotate für CSV- und JSON-Dateieingaben anzugeben.
Beispiel mit dem Ausgabe-Tag --output-annotation-field="info" und JSON-Eingabe:
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] URLs und Anleitungen können sich im Laufe der Zeit ändern. Diese sind Stand Mai 2026 aktuell.
Censys bietet internetweite Host- und Netzwerkdaten, einschließlich Informationen darüber, welche Dienste auf einer IP ausgeführt werden, welche TLS-Zertifikate vorhanden sind und mehr. Sie bieten einen kostenlosen Tarif an, der eine begrenzte Anzahl von Abfragen pro Monat ermöglicht, mit dem IP-Annotationen mit Censys-Daten angereichert werden können.
[!NOTE] Das kostenlose Konto (Stand April 2026) erlaubt eine einzige gleichzeitige Anfrage und 100 Anfragen pro Monat. Sobald alle Credits aufgebraucht sind, gibt die Censys-API bei weiteren Anfragen einen Fehler zurück, bis die Credits zu Beginn des nächsten Monats zurückgesetzt werden oder Sie zusätzliche Credits erwerben. ZAnnotate wird bei Auftreten dieses Fehlers beendet, um stille Fehler zu vermeiden. Wenn Sie einen großen Datensatz annotieren möchten, achten Sie auf Ihren Credit-Verbrauch und priorisieren Sie nur die IPs, für die Sie Credits haben. Da das kostenlose Konto nur eine einzige gleichzeitige Anfrage zulässt, sollten Sie
--censys-threads=1belassen, es sei denn, Sie bezahlen für eine höhere Stufe.
echo "8.8.8.8" | zannotate --censys --censys-pat="CENSYS_PAT_HERE"
Ergebnisse aus Gründen der Kürze gekürzt:
{
"ip":"8.8.8.8",
"censys": {
"whois":{
"network":{ "name":"Google LLC","cidrs":["8.8.8.0/24"],"created":"2023-12-28T00:00:00Z","updated":"2023-12-28T00:00:00Z","allocation_type":"ALLOCATION","handle":"GOGL"},
"organization":{"state":"CA","postal_code":"94043","country":"US","tech_contacts":[{"handle":"ZG39-ARIN","name":"Google LLC","email":"[email protected]"}],
"handle":"GOGL","street":"1600 Amphitheatre Parkway","abuse_contacts":[{"handle":"ABUSE5250-ARIN","name":"Abuse","email":"[email protected]"}],
"admin_contacts":[{"handle":"ZG39-ARIN","name":"Google LLC","email":"[email protected]"}],
"name":"Google LLC",
"city":"Mountain View"}},
"services":[{
"port":53,"protocol":"DNS","transport_protocol":"udp","ip":"8.8.8.8","scan_time":"2026-04-10T02:55:53Z"}]}}
Cymru stellt ASN- und BGP-Peering-Informationen für IP-Adressen bereit. Sie können das Flag --cymru verwenden, um Cymru nach diesen Informationen abzufragen.
Cymru hat einen DNS-Dienst eingerichtet, um diese Informationen bereitzustellen. Standardmäßig verwendet ZAnnotate die systemeigenen DNS-Resolver für die Abfrage.
Wenn Sie mit Ihrem lokalen DNS-Resolver Zeitüberschreitungen feststellen, können Sie mit dem Flag --cymru-dns-servers benutzerdefinierte Resolver angeben.
--cymru-threads und --cymru-timeout sind ebenfalls verfügbar, um die Leistung der Cymru-Annotationen zu konfigurieren. Die Standardeinstellungen sind so gewählt, dass eine gute Leistung erzielt wird, während gleichzeitig Zeitüberschreitungen mit den meisten DNS-Resolvern vermieden werden.
Standardmäßig ruft der Cymru-Annotator die Ursprungs- und Peer-ASs sowie AS-Details für alle ASNs ab. Falls Sie eine Teilmenge wünschen, stehen folgende Flags zur Verfügung:
--cymru-annotate-origin-as, --cymru-annotate-peer-as und --cymru-annotate-as-details.
printf "1.1.1.1" | ./zannotate --cymru --cymru-dns-servers=1.1.1.1,1.0.0.1
{"ip":"207.243.195.103","cymru":{"origin_asns":[7018],"peer_asns":[6939,1299,2914,3257,6461,6762],"asn_details":{"7018":{"asn":7018,"country_code":"US","registry":"arin","asn_allocation_date":"1996-07-30","asn_description":"ATT-INTERNET4 - AT&T Enterprises, LLC, US"},"6939":{"asn":6939,"country_code":"US","registry":"arin","asn_allocation_date":"1996-06-28","asn_description":"HURRICANE - Hurricane Electric LLC, US"},"1299":{"asn":1299,"country_code":"SE","registry":"ripencc","asn_allocation_date":"1993-09-01","asn_description":"TWELVE99 Arelion, fka Telia Carrier, SE"},"2914":{"asn":2914,"country_code":"US","registry":"arin","asn_allocation_date":"1998-12-07","asn_description":"NTT-DATA-2914 - NTT America, Inc., US"},"3257":{"asn":3257,"country_code":"US","registry":"ripencc","asn_allocation_date":"1994-09-30","asn_description":"GTT-BACKBONE GTT, US"},"6461":{"asn":6461,"country_code":"US","registry":"arin","asn_allocation_date":"1996-04-22","asn_description":"ZAYO-6461 - Zayo Bandwidth, US"},"6762":{"asn":6762,"country_code":"IT","registry":"ripencc","asn_allocation_date":"1996-09-12","asn_description":"SEABONE-NET TELECOM ITALIA SPARKLE S.p.A., IT"}},"prefix_details":{"207.242.0.0/15":{"prefix":"207.242.0.0/15","origin_asns":[7018],"peer_asns":[1299,2914,3257,6461,6762,6939],"country_code":"US","registry":"arin","allocation_date":"1996-11-01"}}}
GreyNoise ist ein IP-Intelligenz-Feed, der Metadaten wie Bedrohungsklassifikation und zugehörige CVEs bereitstellt.
Ihre „Psychic“-Datendownloads stellen den Datenfeed in einer Datenbank zur Verfügung, die sich für die Offline-Datenanreicherung eignet.
Um ihren Download mit zannotate zu verwenden, laden Sie eine .mmdb-formatierte Datei mit Ihrem GreyNoise-API-Schlüssel herunter.
Stand April 2026 gewährt die Registrierung mit einem kostenlosen Konto Zugriff auf Datendownloads.
mmdb-Datei herunter. Der folgende Befehl lädt Daten für ein einzelnes Datum (7. April 2026) herunter. Sie können auch Daten für einen Zeitraum von Tagen und für Modelle mit verschiedenen Detaillierungsgraden herunterladen – weitere Informationen finden Sie in der GreyNoise Psychic Dokumentation.curl -H "key: GREYNOISE_API_KEY_HERE" \
https://psychic.labs.greynoise.io/v1/psychic/download/2026-04-07/3/mmdb \
-o /tmp/m3.mmdb
[!NOTE] Die folgenden Beispiele verwenden den genauen Datendownload aus dem obigen
curl-Befehl. Die angezeigten Ergebnisse hängen von den heruntergeladenen Daten ab.
echo "14.1.105.157" | zannotate --greynoise --greynoise-database=/tmp/m3.mmdb
{"greynoise":{"classification":"malicious","cves":["CVE-2015-2051","CVE-2016-20016","CVE-2018-10561","CVE-2018-10562","CVE-2016-6277","CVE-2024-12847"],"date":"2026-04-07","handshake_complete":true,"last_seen":"2026-04-07T00:00:00Z","seen":true,"tags":["Mirai TCP Scanner","Mirai","Telnet Protocol","Generic IoT Default Password Attempt","Web Crawler","Generic Suspicious Linux Command in Request","HNAP Crawler","Telnet Login Attempt","D-Link Devices HNAP SOAPAction Header RCE Attempt","MVPower CCTV DVR RCE CVE-2016-20016 Attempt","JAWS Webserver RCE","GPON CVE-2018-10561 Router Worm","Generic ${IFS} Use in RCE Attempt","CCTV-DVR RCE","NETGEAR Command Injection CVE-2016-6277","NETGEAR DGN setup.cgi CVE-2024-12847 Command Execution Attempt","CGI Script Scanner"],"actor":"unknown"},"ip":"14.1.105.157"}
Beachten Sie, dass viele IPs nicht im GreyNoise-Datensatz enthalten sind, sodass die Ausgabe wie folgt aussehen kann:
echo "1.1.1.1" | zannotate --greynoise --greynoise-database=/tmp/m3.mmdb
{"ip":"1.1.1.1","greynoise":{}}
IPInfo.io bietet einen kostenlosen Datensatz, der ASN- und Geolokalisierungsdaten auf Länderebene enthält. Kostenpflichtige Stufen bieten detailliertere Geolokalisierungsdaten.
mmdb-Datei herunter.

echo "1.1.1.1" | zannotate --ipinfo --ipinfo-database=./path-to-ipinfo-db.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"}}
MaxMind stellt Datensätze für IP-Geolokalisierung und ASN-Daten sowohl in einer kostenlosen (GeoLite) als auch einer kostenpflichtigen (GeoIP) Version bereit. Darüber hinaus sind sowohl die GeoLite- als auch die GeoIP-Datensätze in zwei Zugriffsmustern verfügbar – einer herunterladbaren Datenbankdatei, die lokal abgefragt werden kann, und einer Web-API. Das GeoIP-Modul in ZAnnotate unterstützt die lokale Datenbank sowohl in der GeoLite- als auch in der GeoIP-Version.
Im Folgenden wird davon ausgegangen, dass Sie die kostenlosen GeoLite-Datensätze verwenden möchten, der Vorgang ist jedoch für die kostenpflichtigen GeoIP-Daten ähnlich.

.mmdb-Dateien an einem beliebigen Ort und testen Sie mit den folgenden Befehlen.echo "171.67.71.209" | zannotate --geoip2 --geoip2-database=./path-to-geolite2.mmdb
{
"ip":"171.67.71.209",
"geoip2":{
"city":{"name":"Vallejo","id":5405380},
"country":{"name":"United States","code":"US","id":6252001},
"continent":{"name":"North America","code":"NA","id":6255149},
"postal":{"code":"94590"},
"latlong":{"accuracy_radius":50,"latitude":38.1043,"longitude":-122.2442,"metro_code":807,"time_zone":"America/Los_Angeles"},
"represented_country":{},
"registered_country":{"name":"United States","code":"US","id":6252001},
"metadata":{}}
}
echo "171.67.71.209" | zannotate --geoasn --geoasn-database=/path-to-asn-file.mmdb
{"ip":"171.67.71.209","geoasn":{"asn":32,"org":"STANFORD"}}
RDAP (Registration Data Access Protocol) ist ein Protokoll für den Zugriff auf Registrierungsdaten von Internetressourcen wie IP-Adressen und Domänennamen und der Nachfolger von WHOIS. ZAnnotate kann RDAP-Server abfragen, um Registrierungsdaten für IPs abzurufen.
echo "1.1.1.1" | zannotate --rdap
Ergebnisse aus Gründen der Kürze gekürzt:
{
"ip":"1.1.1.1",
"whois": {
"DecodeData": {},
"Lang": "",
"Conformance": [
"history_version_0",
"nro_rdap_profile_0",
"cidr0",
"rdap_level_0"
],
"ObjectClassName": "ip network"
}
}
Dies sollte die gleiche Ausgabe liefern wie eine direkte Abfrage eines RDAP-Servers, zum Beispiel:
rdap 1.1.1.1
IP Network:
Handle: 1.1.1.0 - 1.1.1.255
Start Address: 1.1.1.0
End Address: 1.1.1.255
IP Version: v4
Name: APNIC-LABS
Type: ASSIGNED PORTABLE
...<weitere Ausgabe aus Gründen der Kürze gekürzt>
ZAnnotate kann Reverse-DNS-Abfragen für jede IP-Adresse durchführen. Es ist kein Download von Daten erforderlich, --rdns fragt direkt Live-DNS-Server ab.
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"]}}
Wenn eine IP keinen PTR-Eintrag hat, bleibt das rdns-Feld leer:
echo "127.0.0.1" | zannotate --rdns
{"ip":"127.0.0.1","rdns":{}}
2025.09).RIBS/.rib.20250923.1200.bz2).bzip2 -d ./path-to-downloaded-file/rib.20250923.1200.bz2
echo "1.1.1.1" | zannotate --routing --routing-mrt-file=/tmp/rib.20250923.1200
{"ip":"1.1.1.1","routing":{"prefix":"1.1.1.0/24","asn":13335,"path":[3561,209,3356,13335]}}
spur.us bietet IP-spezifische Intelligenz wie ASN und Organisation, Infrastrukturklassifizierung (z.B. Rechenzentrum, CDN, Mobil) und Geolokalisierungsmetadaten. Wir können spur.us zusammen mit anderen Quellen abfragen, um Annotationen anzureichern und Rechenzentrums-/Anycast-Bereitstellungen, CDNs und ISP-Eigentum zu identifizieren.
export SPUR_API_KEY=your_api_key_here
(Um dies dauerhaft zu machen, fügen Sie die obige Zeile zu Ihrem Shell-Profil hinzu, z.B. ~/.bashrc oder ~/.zshrc.)
echo "1.1.1.1" | zannotate --spur
{"ip":"1.1.1.1","spur":{"as":{"number":13335,"organization":"Cloudflare, Inc."},"infrastructure":"DATACENTER","ip":"1.1.1.1","location":{"city":"Anycast","country":"ZZ","state":"Anycast"},"organization":"Taguchi Digital Marketing System"}}