TRACIO วิเคราะห์ที่อยู่ IP ของผู้เข้าชมทุกรายที่ฝั่งเซิร์ฟเวอร์ โดยจะทำเครื่องหมาย VPN, พร็อกซี, โหนดทางออก (exit node) ของ Tor และแหล่งที่มาแบบดาต้าเซ็นเตอร์ และระบุตำแหน่งทางภูมิศาสตร์ระดับเมือง การวิเคราะห์ทั้งหมดทำงานที่ฝั่งเซิร์ฟเวอร์โดยไม่มีการพึ่งพาฝั่งไคลเอนต์
IP intelligence ส่งถึงแอปพลิเคชันของคุณผ่าน payload ของ webhook: อ็อบเจ็กต์
network (ค่าบูลีนของ VPN/พร็อกซี/Tor/ดาต้าเซ็นเตอร์ ประเภทการเชื่อมต่อ และ proxy_detected
ตั้งแต่แผน Pro ขึ้นไป) และอ็อบเจ็กต์
geo (ประเทศ, เมือง, พิกัด, เขตเวลา) จะถูกส่งมาในทุก
webhook ส่วน ISP, ASN และอ็อบเจ็กต์ real_ip จะเพิ่มเข้ามาตั้งแต่แผน Business ขึ้นไป
ดูรูปแบบ payload ทั้งหมดและการตรวจสอบลายเซ็นได้ที่ Webhooks
การจำแนก VPN, พร็อกซี, Tor และดาต้าเซ็นเตอร์ ระบุได้จาก IP ที่เชื่อมต่อเข้ามา
โดยใช้ฐานข้อมูล IP intelligence เชิงพาณิชย์ (IP2Location สำหรับประเภท VPN/พร็อกซี/Tor,
MaxMind สำหรับการระบุตำแหน่งทางภูมิศาสตร์และ ASN) แฟล็กทั้งสี่นี้แต่ละตัวจะแสดงเป็นค่าบูลีนเดียวใน
อ็อบเจ็กต์ network ของ webhook — ไม่มีการแยกย่อยตามวิธีการหรือคะแนนความเชื่อมั่นใน
payload สาธารณะ
| Flag | ฟิลด์ | ความหมาย |
|---|---|---|
| VPN | network.vpn | IP เป็นของผู้ให้บริการ VPN ที่รู้จัก |
| พร็อกซี | network.proxy | IP เป็นพร็อกซีแบบดาต้าเซ็นเตอร์หรือ residential |
| Tor | network.tor | IP เป็นโหนดทางออกของ Tor ที่รู้จัก |
| ดาต้าเซ็นเตอร์ | 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}พร็อกซีแบบดาต้าเซ็นเตอร์และแบบ residential ต่างก็แสดงเป็น 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 ส่วนที่อยู่สองแห่งของผู้ให้บริการรายเดียวกัน
(carrier 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 ของที่อยู่นั้น)
การจับคู่โหนดทางออกของ Tor กับ IP ที่เชื่อมต่อเข้ามาจะแสดงเป็น network.tor แยกต่างหากจากนั้น
ตัว Tor Browser เองจะถูกจดจำที่ฝั่งไคลเอนต์จากการตั้งค่าต่อต้าน fingerprinting
โดยไม่ขึ้นกับเส้นทางเครือข่าย — ดู
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 และ 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 มาด้วย ซึ่งบอกว่าผู้เข้าชมเคลื่อนที่ไปมามากเพียงใดในช่วงที่ผ่านมา
| ฟิลด์ | ประเภท | คำอธิบาย |
|---|---|---|
velocity.events5m | number | เหตุการณ์จากผู้เข้าชมรายนี้ใน 5 นาทีล่าสุด |
velocity.unique_ips | number | จำนวน IP ที่ต่างกันซึ่งพบสำหรับผู้เข้าชมรายนี้ |
velocity.unique_locations | number | จำนวนตำแหน่งที่ต่างกันซึ่งพบสำหรับผู้เข้าชมรายนี้ |
บล็อกนี้จะมีอยู่เมื่อตัวนับของผู้เข้าชมพร้อมใช้งาน ณ เวลาที่เกิดเหตุการณ์ (โดยปกติคือเฟส primary)
การไม่มีบล็อกหมายถึง “ไม่มีข้อมูล” ไม่ได้หมายถึงศูนย์ — อย่าตีความการที่ไม่มีบล็อกว่า “ไม่มีกิจกรรมผิดปกติ”
การจับคู่กับ IP-blocklist ไม่ได้ เป็นส่วนหนึ่งของสัญญาสาธารณะ ทั้ง payload ของ webhook และ
แดชบอร์ดไม่เปิดเผยหมวดหมู่ blocklist ส่วน webhook สำหรับความเสี่ยงด้านเครือข่ายคือค่าบูลีน
network, proxy_detected, อ็อบเจ็กต์ real_ip ตั้งแต่แผน Business, ประเภทการเชื่อมต่อ
และตัวนับ velocity ข้างต้น ให้ใช้สิ่งเหล่านี้ร่วมกับฟิลด์ decision
และ bot (ดู Smart Signals) สำหรับการตัดสินใจด้านความเสี่ยง
โค้ดนี้อ่านอ็อบเจ็กต์ network จาก payload ของ webhook โดยตรง ดู 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 }}