TRACIO מנתחת את כתובת ה-IP של כל מבקר בצד השרת. היא מסמנת רשתות VPN, פרוקסי, צמתי יציאה של Tor ומקורות מרכזי נתונים (datacenter), ומפענחת גיאולוקציה ברמת עיר. כל הניתוח מתבצע בצד השרת ללא תלות בצד הלקוח.
ה-IP intelligence מגיע ליישום שלך דרך ה-webhook payload:
אובייקט ה-network (ערכים בוליאניים של VPN/פרוקסי/Tor/datacenter וכן סוג החיבור) ואובייקט
ה-geo (מדינה, עיר, קואורדינטות, אזור זמן) נמסרים בכל
webhook. ה-ISP וה-ASN מתווספים החל מ-Business ומעלה.
ראה Webhooks למבנה ה-payload המלא ולאימות החתימה.
סיווג VPN, פרוקסי, Tor ומרכז נתונים מפוענח מתוך ה-IP המתחבר
באמצעות מסדי נתונים מסחריים של IP intelligence (IP2Location לסוג VPN/פרוקסי/Tor,
MaxMind לגיאולוקציה ו-ASN). כל אחד מוצג כערך בוליאני יחיד באובייקט
ה-network של ה-webhook — אין פירוט לפי שיטה או ציון ביטחון (confidence score) ב-payload
הציבורי.
| דגל | שדה | משמעות |
|---|---|---|
| VPN | network.vpn | ה-IP שייך לספק VPN מוכר |
| Proxy | network.proxy | ה-IP הוא פרוקסי datacenter או residential |
| 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}פרוקסי datacenter ו-residential מוצגים שניהם כ-network.proxy; מקור datacenter
מדווח בנוסף כ-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 Browser עצמו מזוהה בצד הלקוח לפי תצורת האנטי-פינגרפרינטינג שלו,
ללא תלות בנתיב הרשת — ראה
Smart Signals.
גיאולוקציה ברמת עיר מפוענחת בצד השרת מתוך ה-IP המתחבר
(MaxMind) ונמסרת באובייקט ה-geo של ה-webhook.
| שדה | סוג | תיאור | תוכנית |
|---|---|---|---|
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 מזוהה גם הספק. ב-payload של ה-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 — עד כמה המבקר נע לאחרונה:
| שדה | סוג | תיאור |
|---|---|---|
velocity.events5m | number | אירועים מהמבקר הזה ב-5 הדקות האחרונות |
velocity.uniqueIps | number | כתובות IP שונות שנצפו עבור המבקר הזה |
velocity.uniqueLocations | number | מיקומים שונים שנצפו עבור המבקר הזה |
הבלוק קיים כאשר מוני המבקר זמינים בזמן האירוע (בדרך כלל שלב primary).
היעדר הבלוק משמעו “אין נתונים”, לא אפסים — אל תתייחס להיעדרו כאל “אין פעילות חריגה”.
התאמה מול רשימות חסימה של IP (IP-blocklist) אינה חלק מהחוזה הציבורי: לא ה-webhook
payload ולא לוח הבקרה חושפים קטגוריות רשימות חסימה. משטח ה-webhook לסיכוני רשת הוא דגלי
ה-network הבוליאניים, סוג החיבור ומוני ה-velocity שלמעלה; השתמש בהם יחד עם השדות
decision ו-bot (ראה Smart Signals) להחלטות סיכון.
זה קורא ישירות את אובייקט ה-network של ה-webhook payload. ראה
Webhooks ל-payload המלא ולאימות החתימה.
// `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 }}