TRACIO, her ziyaretçinin IP adresini sunucu tarafında analiz eder. VPN'leri, proxy'leri, Tor çıkış düğümlerini ve veri merkezi kaynaklarını işaretler; şehir düzeyinde coğrafi konumu çözümler. Tüm analiz, istemci tarafı bağımlılığı olmadan sunucu tarafında çalışır.
IP intelligence, uygulamanıza webhook yükü üzerinden ulaşır: network
nesnesi (VPN/proxy/Tor/veri merkezi boolean değerleri, bağlantı türü ve Pro ve üzeri
planlarda proxy_detected) ile
geo nesnesi (ülke, şehir, koordinatlar, saat dilimi) her webhook ile
teslim edilir. ISP, ASN ve real_ip nesnesi Business ve üzeri planlarda eklenir. Tam yük
yapısı ve imza doğrulaması için Webhooks sayfasına bakın.
VPN, proxy, Tor ve veri merkezi sınıflandırması, bağlanan IP üzerinden ticari IP
intelligence veritabanları kullanılarak çözümlenir (VPN/proxy/Tor türü için IP2Location,
coğrafi konum ve ASN için MaxMind). Bu dört bayrağın her biri, webhook network nesnesinde tek bir boolean
olarak sunulur — genel yükte yönteme göre bir ayrıntı dökümü veya güven puanı bulunmaz.
| Bayrak | Alan | Anlamı |
|---|---|---|
| VPN | network.vpn | IP, bilinen bir VPN sağlayıcısına aittir |
| Proxy | network.proxy | IP, bir veri merkezi veya konut proxy'sidir |
| Tor | network.tor | IP, bilinen bir Tor çıkış düğümüdür |
| Veri merkezi | network.datacenter | IP, bir bulut/barındırma sağlayıcısına aittir |
{ "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}Veri merkezi ve konut proxy'lerinin ikisi de network.proxy olarak sunulur; veri merkezi
kaynağı ayrıca network.datacenter olarak bildirilir. Sınıflandırma, büyük bulut/barındırma
sağlayıcılarını (AWS, Google Cloud, Azure, Oracle Cloud, Alibaba Cloud, DigitalOcean, Hetzner, OVH,
Linode/Akamai, Vultr ve diğerlerini) kapsayan IP2Location proxy veritabanından gelir.
{ "network": { "vpn": false, "proxy": true, "tor": false, "datacenter": true, "connection_type": "DCH" }}network.proxy, bağlantının geldiği adresi sınıflandırır. Ayrı bir denetim ise bir
ziyaretin sayfa trafiğini ham ağ yoluyla karşılaştırır: ikisi farklı ağlardan çıkıyorsa
tarayıcı ile sitenizin arasında bir proxy ya da VPN vardır ve ziyaret
network.proxy_detected: true ile bildirilir. Aynı sağlayıcıya ait iki adres — operatör
NAT'ı, aynı VPN'in ikinci bir çıkışı — sayılmaz.
Business ve üzerinde, proxy ya da VPN'in arkasında gözlemlenen genel adres, bağlantının
geldiği adresin yanında, ülkesi ve ISP'siyle birlikte network.real_ip olarak teslim
edilir. Böyle bir adres gözlemlenmediğinde alan bulunmaz; bu yüzden korumalı okuyun
(network.real_ip?.country); country ve isp, çözümlenemedikleri durumda bulunmaz.
{ "network": { "proxy": false, "proxy_detected": true, "real_ip": { "address": "203.0.113.7", "country": "NL", "isp": "KPN" } }}Webhooks içinde her iki alan da her ziyarette aynı adlarla gelir.
Data API ziyaretçi özeti ise bunları network.proxy_detected_seen
(tarayıcının önünde daha önce bir proxy bulunup bulunmadığı) ve network.last_real_ip
(en son adres, ülkesi ve ISP'siyle birlikte) şeklinde toplulaştırır.
Bağlanan IP üzerindeki bir Tor çıkış düğümü eşleşmesi network.tor olarak sunulur. Bundan ayrı olarak,
Tor Browser tarayıcısının kendisi, ağ yolundan bağımsız olarak anti-fingerprinting
yapılandırmasından istemci tarafında tanınır — bkz.
Smart Signals.
Şehir düzeyinde coğrafi konum, bağlanan IP'den sunucu tarafında çözümlenir
(MaxMind) ve webhook geo nesnesinde teslim edilir.
| Alan | Tür | Açıklama | Plan |
|---|---|---|---|
geo.country | string | ISO 3166-1 alpha-2 ülke kodu | Tümü |
geo.city | string | Şehir adı | Tümü |
geo.lat | number | Yaklaşık enlem | Tümü |
geo.lon | number | Yaklaşık boylam | Tümü |
geo.timezone | string | IANA saat dilimi tanımlayıcısı | Tümü |
{ "geo": { "country": "CZ", "city": "Prague", "lat": 50.05, "lon": 14.4, "timezone": "Europe/Prague" }}Business ve Enterprise planlarında operatör de belirlenir. Webhook yükünde her iki alan
da network nesnesinde yer alır; ISP ayrıca geo.isp olarak tekrarlanır:
{ "network": { "vpn": false, "proxy": false, "tor": false, "datacenter": false, "isp": "Comcast Cable", "asn": 7922 }}Data API üzerinden bir oturum okunduğunda dağılım biraz farklıdır:
isp yalnızca geo nesnesinde, asn ise network nesnesinde bulunur. Aynı veri, iki farklı
yüzey — alanı, kullandığınız yüzeyin onu koyduğu yerden okuyun.
Pro ve üzeri planlarda webhook bir velocity bloğu taşır — ziyaretçinin son zamanlarda ne
kadar hareket ettiğini:
| Alan | Tür | Açıklama |
|---|---|---|
velocity.events5m | number | Bu ziyaretçiden son 5 dakikadaki olaylar |
velocity.unique_ips | number | Bu ziyaretçi için görülen farklı IP'ler |
velocity.unique_locations | number | Bu ziyaretçi için görülen farklı konumlar |
Blok, ziyaretçi sayaçları olay anında kullanılabilir olduğunda bulunur (normalde primary
aşaması). Bloğun bulunmaması “veri yok” demektir, sıfır demek değildir — yokluğunu
“olağan dışı etkinlik yok” olarak yorumlamayın.
IP kara liste eşleştirmesi genel sözleşmenin bir parçası değildir: ne webhook yükü ne de
kontrol paneli kara liste kategorilerini açığa çıkarır. Ağ riski için webhook yüzeyi, boolean
network bayrakları, proxy_detected, Business planında real_ip nesnesi, bağlantı türü ve
yukarıdaki velocity sayaçlarıdır; risk kararları için
bunları decision ve bot alanlarıyla (bkz. Smart Signals) birlikte
kullanın.
Bu, webhook yükünün network nesnesini doğrudan okur. Tam yük ve imza doğrulaması için
Webhooks sayfasına bakın.
// `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 }}