TRACIO प्रत्येक विज़िटर के IP पते का सर्वर-साइड विश्लेषण करता है। यह VPN, प्रॉक्सी, Tor एग्ज़िट नोड और डेटासेंटर मूल को फ़्लैग करता है, और शहर-स्तरीय जियोलोकेशन को रिज़ॉल्व करता है। पूरा विश्लेषण बिना किसी क्लाइंट-साइड निर्भरता के सर्वर-साइड चलता है।
IP intelligence आपके एप्लिकेशन तक webhook payload के माध्यम से पहुँचती है:
network ऑब्जेक्ट (VPN/प्रॉक्सी/Tor/डेटासेंटर बूलियन, कनेक्शन प्रकार और Pro तथा उससे ऊपर
proxy_detected) और
geo ऑब्जेक्ट (देश, शहर, निर्देशांक, टाइमज़ोन) प्रत्येक webhook पर
डिलीवर किए जाते हैं। ISP, ASN और real_ip ऑब्जेक्ट Business तथा उससे ऊपर के प्लान में
जुड़ते हैं।
पूर्ण payload संरचना और सिग्नेचर सत्यापन के लिए Webhooks देखें।
VPN, प्रॉक्सी, Tor और डेटासेंटर वर्गीकरण को कनेक्ट करने वाले IP से
वाणिज्यिक IP intelligence डेटाबेस का उपयोग करके रिज़ॉल्व किया जाता है (VPN/प्रॉक्सी/Tor प्रकार के लिए IP2Location,
जियोलोकेशन और ASN के लिए MaxMind)। इन चारों फ़्लैग में से प्रत्येक को webhook के network ऑब्जेक्ट पर एक ही बूलियन के
रूप में प्रस्तुत किया जाता है — सार्वजनिक payload में प्रति-विधि विवरण या कॉन्फिडेंस स्कोर
नहीं होता।
| 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, "connection_type": "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, "connection_type": "DCH" }}network.proxy उस पते को वर्गीकृत करता है जहाँ से कनेक्शन आया। एक अलग जाँच किसी विज़िट के पेज
ट्रैफ़िक की तुलना उसके कच्चे नेटवर्क पथ से करती है: जब दोनों अलग-अलग नेटवर्क से बाहर निकलते हैं, तो
ब्राउज़र और आपकी साइट के बीच कोई प्रॉक्सी या VPN है, और उस विज़िट को network.proxy_detected: true
के साथ रिपोर्ट किया जाता है। एक ही प्रदाता के दो पते — कैरियर NAT, उसी VPN का दूसरा एग्ज़िट — नहीं
गिने जाते।
Business और उससे ऊपर, प्रॉक्सी या VPN के पीछे देखा गया सार्वजनिक पता, जिस पते से कनेक्शन आया उसके
साथ-साथ, अपने देश और ISP सहित network.real_ip के रूप में डिलीवर किया जाता है। ऐसा कोई पता न दिखे
तो यह मौजूद नहीं होता, इसलिए इसे गार्ड के साथ पढ़ें (network.real_ip?.country); country
और isp तब मौजूद नहीं होते जब उन्हें रिज़ॉल्व नहीं किया जा सका।
{ "network": { "proxy": false, "proxy_detected": true, "real_ip": { "address": "203.0.113.7", "country": "NL", "isp": "KPN" } }}Webhooks में दोनों फ़ील्ड हर विज़िट पर उन्हीं नामों से आते हैं।
Data API का विज़िटर सारांश इन्हें network.proxy_detected_seen (क्या कभी
प्रॉक्सी आगे रही थी) और network.last_real_ip (सबसे हालिया पता, उसके देश और ISP के साथ) के
रूप में समेकित करता है।
कनेक्ट करने वाले IP पर Tor एग्ज़िट-नोड मैच network.tor के रूप में सामने आता है। इससे अलग,
Tor Browser को स्वयं उसके एंटी-फ़िंगरप्रिंटिंग कॉन्फ़िगरेशन से क्लाइंट-साइड
पहचाना जाता है, नेटवर्क पथ से स्वतंत्र रूप से — देखें
Smart Signals।
शहर-स्तरीय जियोलोकेशन को कनेक्ट करने वाले IP से सर्वर-साइड रिज़ॉल्व किया जाता है
(MaxMind) और webhook के geo ऑब्जेक्ट पर डिलीवर किया जाता है।
| 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 payload में दोनों फ़ील्ड
network ऑब्जेक्ट पर होते हैं, और ISP को geo.isp के रूप में दोहराया जाता है:
{ "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.unique_ips | number | इस विज़िटर के लिए देखे गए अलग-अलग IP |
velocity.unique_locations | number | इस विज़िटर के लिए देखे गए अलग-अलग स्थान |
यह ब्लॉक तब मौजूद होता है जब घटना के समय विज़िटर काउंटर उपलब्ध हों (सामान्यतः primary
फ़ेज़)। ब्लॉक का न होना “डेटा नहीं” का अर्थ रखता है, शून्य का नहीं — इसकी अनुपस्थिति को
“कोई असामान्य गतिविधि नहीं” न मानें।
IP-ब्लॉकलिस्ट मिलान सार्वजनिक अनुबंध का हिस्सा नहीं है: न तो webhook payload और न ही
डैशबोर्ड ब्लॉकलिस्ट श्रेणियों को उजागर करता है। नेटवर्क जोखिम के लिए webhook सतह बूलियन
network फ़्लैग, proxy_detected, Business पर real_ip ऑब्जेक्ट, कनेक्शन प्रकार और ऊपर दिए गए
वेलोसिटी काउंटर हैं; जोखिम निर्णयों के लिए
इन्हें decision और bot फ़ील्ड के साथ उपयोग करें (देखें
Smart Signals)।
यह सीधे webhook payload के network ऑब्जेक्ट को पढ़ता है। पूर्ण payload और सिग्नेचर सत्यापन के लिए देखें
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 }}