يحلّل TRACIO عنوان IP لكل زائر من جانب الخادم. فهو يشير إلى شبكات VPN والوكلاء (proxies) وعُقد خروج Tor ومصادر مراكز البيانات، ويحدّد الموقع الجغرافي على مستوى المدينة. يجري التحليل بالكامل من جانب الخادم دون أي اعتماديات من جانب العميل.
تصل بيانات IP Intelligence إلى تطبيقك عبر حمولة الـ webhook: يُسلَّم الكائن
network (قيم منطقية لـ VPN/الوكيل/Tor/مركز البيانات إضافة إلى نوع الاتصال) والكائن
geo (البلد، المدينة، الإحداثيات، المنطقة الزمنية) مع كل
webhook. ويُضاف مزوّد الخدمة (ISP) وASN اعتبارًا من خطة Business فما فوق.
راجع Webhooks للاطلاع على الشكل الكامل للحمولة والتحقق من التوقيع.
يُحدَّد تصنيف VPN والوكيل وTor ومركز البيانات انطلاقًا من عنوان IP المتصل
باستخدام قواعد بيانات تجارية لـ IP intelligence (IP2Location لنوع VPN/الوكيل/Tor،
وMaxMind لتحديد الموقع الجغرافي وASN). يظهر كلٌّ منها كقيمة منطقية واحدة في الكائن
network ضمن الـ webhook — ولا يوجد تفصيل لكل طريقة على حدة أو درجة ثقة في
الحمولة العامة.
| Flag | Field | Meaning |
|---|---|---|
| VPN | network.vpn | ينتمي عنوان IP إلى مزوّد VPN معروف |
| Proxy | network.proxy | عنوان IP هو وكيل من مركز بيانات أو وكيل سكني |
| Tor | network.tor | عنوان IP هو عُقدة خروج Tor معروفة |
| Datacenter | network.datacenter | ينتمي عنوان IP إلى مزوّد سحابي/استضافة |
{ "network": { "vpn": true, "proxy": true, "tor": false, "datacenter": false, "connectionType": "VPN" }}// `payload` is the webhook delivery body (/docs/webhooks)if (payload.network.vpn) { // visitor is connecting through a VPN}يظهر كلٌّ من الوكلاء العاملين على مراكز البيانات والوكلاء السكنيين على أنه network.proxy؛ أما مصدر
مركز البيانات فيُبلَّغ عنه إضافيًّا على أنه network.datacenter. يأتي التصنيف من
قاعدة بيانات الوكلاء في IP2Location، التي تغطي كبار مزوّدي السحابة/الاستضافة (AWS،
Google Cloud، Azure، Oracle Cloud، Alibaba Cloud، DigitalOcean، Hetzner، OVH،
Linode/Akamai، Vultr وغيرهم).
{ "network": { "vpn": false, "proxy": true, "tor": false, "datacenter": true, "connectionType": "DCH" }}تظهر مطابقة عُقدة خروج Tor على عنوان IP المتصل على أنها network.tor. وبشكل منفصل،
يُتعرَّف على متصفح Tor نفسه من جانب العميل عبر إعداده المضاد لأخذ البصمة،
بصرف النظر عن مسار الشبكة — راجع
Smart Signals.
يُحدَّد الموقع الجغرافي على مستوى المدينة من جانب الخادم انطلاقًا من عنوان IP المتصل
(MaxMind)، ويُسلَّم في الكائن geo ضمن الـ webhook.
| Field | Type | Description | Plan |
|---|---|---|---|
geo.country | string | رمز البلد ISO 3166-1 alpha-2 | الكل |
geo.city | string | اسم المدينة | الكل |
geo.lat | number | خط العرض التقريبي | الكل |
geo.lon | number | خط الطول التقريبي | الكل |
geo.timezone | string | مُعرّف المنطقة الزمنية IANA | الكل |
{ "geo": { "country": "CZ", "city": "Prague", "lat": 50.05, "lon": 14.4, "timezone": "Europe/Prague" }}في خطتَي Business وEnterprise يُحدَّد المشغّل أيضًا. وفي حمولة الـ webhook يقع كلا الحقلين في الكائن network:
{ "network": { "vpn": false, "proxy": false, "tor": false, "datacenter": false, "isp": "Comcast Cable", "asn": 7922 }}وعند قراءة الجلسة عبر Data API يختلف التوزيع قليلًا: يقع isp في geo
بينما يقع asn في network. البيانات نفسها لكن السطحين مختلفان — اقرأ الحقل من حيث يضعه
السطح الذي تستخدمه.
اعتبارًا من خطة Pro، تحمل الـ webhook كتلة velocity تبيّن مدى تنقّل الزائر مؤخرًا:
| Field | Type | Description |
|---|---|---|
velocity.events5m | number | أحداث هذا الزائر خلال آخر 5 دقائق |
velocity.uniqueIps | number | عناوين IP المختلفة التي رُصدت لهذا الزائر |
velocity.uniqueLocations | number | المواقع المختلفة التي رُصدت لهذا الزائر |
تكون الكتلة موجودة عندما تتوفّر عدّادات الزائر وقت وقوع الحدث (عادةً مرحلة primary).
غياب الكتلة يعني «لا توجد بيانات»، لا أصفارًا — لا تعتبر غيابها «لا يوجد نشاط غير معتاد».
مطابقة قوائم حظر IP ليست جزءًا من العقد العام: فلا حمولة الـ webhook ولا لوحة التحكم
تكشفان فئات قوائم الحظر. تتمثّل واجهة الـ webhook الخاصة بمخاطر الشبكة في القيم المنطقية
لأعلام network ونوع الاتصال وعدّادات velocity أعلاه؛ استخدمها مع الحقلين decision
وbot (راجع Smart Signals) لاتخاذ قرارات المخاطر.
يقرأ هذا الكائن network من حمولة الـ webhook مباشرة. راجع
Webhooks للاطلاع على الحمولة الكاملة والتحقق من التوقيع.
// `payload` is the webhook delivery body (/docs/webhooks)function assessIPRisk(payload: WebhookPayload) { const { vpn, proxy, tor, datacenter } = payload.network
const risks: string[] = [] let riskLevel = "low"
if (tor) { risks.push("Tor exit node") riskLevel = "critical" }
if (vpn) { risks.push("VPN detected") riskLevel = riskLevel === "low" ? "medium" : riskLevel }
if (proxy) { risks.push("Proxy detected") riskLevel = riskLevel === "low" ? "medium" : riskLevel }
if (datacenter) { risks.push("Datacenter IP") riskLevel = riskLevel === "low" ? "medium" : riskLevel }
return { riskLevel, risks }}