
أداة لتوضيح مجموعات بيانات الإنترنت ببيانات وصفية سياقية (مثل: origin AS، MaxMind GeoIP2، reverse DNS، وWHOIS)
ZAnnotate هي أداة مكتوبة بلغة Go تُسهّل تعليق مجموعات كبيرة من عناوين IP ببيانات وصفية للشبكة. حاليًا، يتضمن ذلك:
| CLI Flag | الوصف | يحتاج إلى مفتاح API | يحتاج إلى تحميل بيانات |
|---|---|---|---|
--censys | معلومات Censys للاستخبارات على الإنترنت (API مباشر) | نعم | |
--cymru | تفاصيل ASN المنشأ/النظير وعناوين ASN من Cymru | ||
--geoasn | بيانات ASN من MaxMind GeoIP | نعم | |
--geoip2 | بيانات المدينة والموقع الجغرافي من MaxMind GeoIP2 | نعم | |
--greynoise | بيانات استخبارات التهديدات النفسية (Psychic) وبيانات CVE من GreyNoise | نعم (للتحميل) | نعم |
--ipinfo | بيانات ASN والموقع الجغرافي من IPInfo.io | نعم | |
--rdap | استعلامات RDAP (خليفة WHOIS) (مباشر) | ||
--rdns | استعلامات DNS عكسي (مباشر) | ||
--routing | بيانات BGP/التوجيه من جدول توجيه MRT | نعم | |
--spur | معلومات Spur الذكية (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.
[!NOTE] الحساب المجاني (اعتبارًا من أبريل 2026) يسمح بطلب واحد متزامن و 100 طلب شهريًا. بمجرد استخدام جميع أرصدتك، سيعيد API Censys خطأً عند الطلبات اللاحقة حتى يتم إعادة تعيين أرصدتك في بداية الشهر التالي أو إذا قمت بشراء أرصدة إضافية. سينهي ZAnnotate التشغيل مع خطأ في حالة حدوث ذلك لمنع الأخطاء الصامتة، لذا إذا كانت لديك مجموعة بيانات كبيرة لتُعلّق، فكن منتبهًا لاستخدام رصيدك وأولوية تعليق عناوين IP التي لديك أرصدة لها فقط. مع الحساب المجاني الذي يقدم طلبًا واحدًا متزامنًا فقط، ستحتاج إلى ترك
--censys-threads=1ما لم تدفع مقابل طبقة أعلى.