Help
RSS
API
Feed
Maltego
Contact
Domain > dmitry.vip
×
More information on this domain is in
AlienVault OTX
Is this malicious?
Yes
No
DNS Resolutions
Date
IP Address
2018-10-21
87.236.19.42
(
ClassC
)
2026-01-24
185.215.4.66
(
ClassC
)
Port 80
HTTP/1.1 200 OKServer: ddos-guardConnection: keep-aliveKeep-Alive: timeout60Set-Cookie: __ddg8_AlmUrcofgDuRp7IU; Domain.dmitry.vip; Path/; ExpiresSat, 24-Jan-2026 10:44:24 GMTSet-Cookie: __ddg10_1769250264; Domain.dmitry.vip; Path/; ExpiresSat, 24-Jan-2026 10:44:24 GMTSet-Cookie: __ddg9_52.40.234.105; Domain.dmitry.vip; Path/; ExpiresSat, 24-Jan-2026 10:44:24 GMTSet-Cookie: __ddg1_OTtWqhneAC4yzj3wVtsW; Domain.dmitry.vip; HttpOnly; Path/; ExpiresSun, 24-Jan-2027 10:24:24 GMTdate: Sat, 24 Jan 2026 10:24:24 GMTcontent-type: text/html; charsetUTF-8last-modified: Sat, 24 Jan 2026 10:12:00 GMTetag: W/a84f-6491f81339303-gzipx-frame-options: SAMEORIGINx-ws-id: 13x-host: dmitry.vipx-tilda-server: 33x-tilda-imprint: 8ce3c755-67e5-45d5-b620-c5637071148aTransfer-Encoding: chunked !DOCTYPE html> html> head> meta charsetutf-8 /> meta http-equivContent-Type contenttext/html; charsetutf-8 /> meta nameviewport contentwidthdevice-width, initial-scale1.0 /> !--metatextblock--> title>Dmitrys website/title> meta propertyog:url contenthttp://dmitry.vip /> meta propertyog:title contentDmitry's website /> meta propertyog:description content /> meta propertyog:type contentwebsite /> meta propertyog:image contenthttps://static.tildacdn.net/tild6330-3262-4165-b862-613266623038/Dmitry_vip_icon_v5.png /> link relcanonical hrefhttp://dmitry.vip> !--/metatextblock--> meta nameformat-detection contenttelephoneno /> meta http-equivx-dns-prefetch-control contenton> link reldns-prefetch hrefhttps://ws.tildacdn.com> link reldns-prefetch hrefhttps://static.tildacdn.net> meta namerobots contentnoindex,nofollow /> link relshortcut icon hrefhttps://static.tildacdn.net/tild3035-6239-4135-b165-623163386464/icons8-d-67.png typeimage/x-icon /> !-- Assets --> script srchttps://neo.tildacdn.com/js/tilda-fallback-1.0.min.js async charsetutf-8>/script> link relstylesheet hrefhttps://static.tildacdn.net/css/tilda-grid-3.0.min.css typetext/css mediaall onerrorthis.loaderry;/> link relstylesheet hrefhttps://static.tildacdn.net/ws/project20772446/tilda-blocks-page111982426.min.css?t1769249520 typetext/css mediaall onerrorthis.loaderry; /> link relpreconnect hrefhttps://fonts.gstatic.com> link hrefhttps://fonts.googleapis.com/css2?familyComfortaa:wght@300;400;500;600;700&subsetlatin,cyrillic relstylesheet> link relstylesheet hrefhttps://static.tildacdn.net/css/tilda-cover-1.0.min.css typetext/css mediaall onerrorthis.loaderry; /> script nomodule srchttps://static.tildacdn.net/js/tilda-polyfill-1.0.min.js charsetutf-8>/script> script typetext/javascript>function t_onReady(func) {if(document.readyState!loading) {func();} else {document.addEventListener(DOMContentLoaded,func);}}function t_onFuncLoad(funcName,okFunc,time) {if(typeof windowfuncNamefunction) {okFunc();} else {setTimeout(function() {t_onFuncLoad(funcName,okFunc,time);},(time||100));}}/script> script srchttps://static.tildacdn.net/js/tilda-scripts-3.0.min.js charsetutf-8 defer onerrorthis.loaderry;>/script> script srchttps://static.tildacdn.net/ws/project20772446/tilda-blocks-page111982426.min.js?t1769249520 charsetutf-8 async onerrorthis.loaderry;>/script> script srchttps://static.tildacdn.net/js/tilda-lazyload-1.0.min.js charsetutf-8 async onerrorthis.loaderry;>/script> script srchttps://static.tildacdn.net/js/tilda-cover-1.0.min.js charsetutf-8 async onerrorthis.loaderry;>/script> script srchttps://static.tildacdn.net/js/tilda-video-processor-1.0.min.js charsetutf-8 async onerrorthis.loaderry;>/script> script srchttps://static.tildacdn.net/js/tilda-events-1.0.min.js charsetutf-8 async onerrorthis.loaderry;>/script> !-- nominify begin -->script>(function() { use strict; // ═══════════════════════════════════════════════════════════════ // CONFIGURATION - UPDATE THIS URL AFTER DEPLOYING WORKER // ═══════════════════════════════════════════════════════════════ // const WORKER_URL https://YOUR-WORKER-NAME.YOUR-ACCOUNT.workers.dev; const WORKER_URL https://visitor-ai.klimenko-dnk.workers.dev; const CONFIG { storageKey: _vt_data, idleTimeout: 5000 }; // ═══════════════════════════════════════════════════════════════ // STATE // ═══════════════════════════════════════════════════════════════ const state { startTime: Date.now(), scrollDepth: 0, clicks: 0, keys: 0, rageClicks: 0, copies: 0, pastes: 0, formInteractions: 0, activeTime: 0, isActive: true, lastActiveTime: Date.now(), lastClickTime: 0, tabSwitches: 0, mouseDistance: 0, lastMousePos: null, exitSent: false, visitor: null }; // ═══════════════════════════════════════════════════════════════ // UTILITIES // ═══════════════════════════════════════════════════════════════ const utils { hash: (str) > { let h 0; for (let i 0; i str.length; i++) { h ((h 5) - h) + str.charCodeAt(i); h | 0; } return Math.abs(h).toString(16).padStart(8, 0); }, formatTime: (ms) > { const s Math.floor(ms / 1000); const m Math.floor(s / 60); const h Math.floor(m / 60); if (h > 0) return `${h}h ${m % 60}m ${s % 60}s`; if (m > 0) return `${m}m ${s % 60}s`; return `${s}s`; }, isIPv4: (ip) > /^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/.test(ip), isIPv6: (ip) > ip && ip.includes(:) && /^a-f0-9:+$/i.test(ip), getStorage: () > { try { const d localStorage.getItem(CONFIG.storageKey); return d ? JSON.parse(d) : null; } catch { return null; } }, setStorage: (data) > { try { localStorage.setItem(CONFIG.storageKey, JSON.stringify(data)); } catch {} }, debounce: (fn, delay) > { let t; return (...args) > { clearTimeout(t); t setTimeout(() > fn(...args), delay); }; } }; // ═══════════════════════════════════════════════════════════════ // FINGERPRINTING // ═══════════════════════════════════════════════════════════════ const fingerprint { canvas: () > { try { const c document.createElement(canvas); c.width 280; c.height 60; const ctx c.getContext(2d); ctx.fillStyle #f0f0f0; ctx.fillRect(0, 0, 280, 60); ctx.textBaseline alphabetic; ctx.fillStyle #069; ctx.font 15px Arial; ctx.fillText(Cwm fjord veg, 4, 20); ctx.fillStyle rgba(102,204,0,0.7); ctx.font 18px Georgia; ctx.fillText(balks jynx, 4, 45); ctx.beginPath(); ctx.arc(240, 30, 20, 0, Math.PI * 2); ctx.fillStyle #f60; ctx.fill(); return utils.hash(c.toDataURL()); } catch { return unavailable; } }, audio: () > new Promise((resolve) > { try { const AC window.OfflineAudioContext || window.webkitOfflineAudioContext; if (!AC) return resolve(unavailable); const ctx new AC(1, 44100, 44100); const osc ctx.createOscillator(); const comp ctx.createDynamicsCompressor(); osc.type triangle; osc.frequency.setValueAtTime(10000, ctx.currentTime); comp.threshold.setValueAtTime(-50, ctx.currentTime); comp.knee.setValueAtTime(40, ctx.currentTime); comp.ratio.setValueAtTime(12, ctx.currentTime); comp.attack.setValueAtTime(0, ctx.currentTime); comp.release.setValueAtTime(0.25, ctx.currentTime); osc.connect(comp); comp.connect(ctx.destination); osc.start(0); ctx.startRendering(); ctx.oncomplete (e) > { let sum 0; const data e.renderedBuffer.getChannelData(0); for (let i 4500; i 5000; i++) sum + Math.abs(datai); resolve(sum.toString().slice(0, 10)); }; setTimeout(() > resolve(timeout), 1000); } catch { resolve(error); } }), webgl: () > { try { const c document.createElement(canvas); const gl c.getContext(webgl) || c.getContext(experimental-webgl); if (!gl) return { renderer: unavailable, vendor: unavailable, extensions: 0 }; const dbg gl.getExtension(WEBGL_debug_renderer_info); const exts gl.getSupportedExtensions() || ; return { renderer: dbg ? (gl.getParameter(dbg.UNMASKED_RENDERER_WEBGL) || ).substring(0, 80) : hidden, vendor: dbg ? gl.getParameter(dbg.UNMASKED_VENDOR_WEBGL) || : hidden, extensions: exts.length }; } catch { return { renderer: error, vendor: error, extensions: 0 }; } }, fonts: () > { const baseFonts monospace, sans-serif, serif; const testFonts Arial, Verdana, Times New Roman, Courier New, Georgia, Comic Sans MS, Impact, Trebuchet MS, Arial Black, Palatino, Lucida Console, Tahoma, Century Gothic, Bookman Old Style; const detected ; try { const span document.createElement(span); span.style.cssText position:absolute;left:-9999px;font-size:72px; span.textContent mmmmmmmmlli; document.body.appendChild(span); const baseWidths {}; for (const base of baseFonts) { span.style.fontFamily base; baseWidthsbase span.offsetWidth; } for (const font of testFonts) { for (const base of baseFonts) { span.style.fontFamily `${font}, ${base}`; if (span.offsetWidth ! baseWidthsbase) { detected.push(font); break; } } } span.remove(); } catch {} return { count: detected.length, list: detected.join(, ) }; }, mathFingerprint: () > { try { const tests Math.tan(-1e300), Math.sin(1), Math.acos(0.5), Math.atan(2), Math.exp(1), Math.log(10), Math.pow(Math.PI, -100) ; return utils.hash(tests.map(t > t.toString()).join(|)); } catch { return unavailable; } }, mediaDevices: async () > { try { if (!navigator.mediaDevices?.enumerateDevices) return { audio: 0, video: 0, speakers: 0 }; const devices await navigator.mediaDevices.enumerateDevices(); return { audio: devices.filter(d > d.kind audioinput).length, video: devices.filter(d > d.kind videoinput).length, speakers: devices.filter(d > d.kind audiooutput).length }; } catch { return { audio: 0, video: 0, speakers: 0 }; } }, storageQuota: async () > { try { if (navigator.storage?.estimate) { const est await navigator.storage.estimate(); return { quota: Math.round((est.quota || 0) / 1024 / 1024) + MB, usage: Math.round((est.usage || 0) / 1024) + KB }; } } catch {} return { quota: unknown, usage: unknown }; }, webrtc: () > new Promise((resolve) > { const ips { local: null, public: null, all: , ipv4: null, ipv6: null }; try { const RTC window.RTCPeerConnection || window.mozRTCPeerConnection || window.webkitRTCPeerConnection; if (!RTC) return resolve(ips); const pc new RTC({ iceServers: { urls: stun:stun.l.google.com:19302 } }); pc.createDataChannel(); pc.onicecandidate (e) > { if (!e.candidate) return; const c e.candidate.candidate; const v4Match c.match(/(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})/); const v6Match c.match(/(a-f0-9:{10,})/i); if (v4Match) { const ip v4Match1; if (!ips.all.includes(ip)) { ips.all.push(ip); if (/^(192\.168\.|10\.|172\.(16-9|2\d|301)\.)/.test(ip)) ips.local ip; else if (!/^(0\.|127\.|169\.254\.)/.test(ip)) { ips.public ip; ips.ipv4 ip; } } } if (v6Match && v6Match1.includes(:)) { const ip v6Match1; if (!ips.all.includes(ip) && !/^(::1|fe80)/i.test(ip)) { ips.all.push(ip); if (!ips.ipv6) ips.ipv6 ip; if (!ips.public) ips.public ip; } } }; pc.createOffer().then(o > pc.setLocalDescription(o)).catch(() > {}); setTimeout(() > { pc.close(); resolve(ips); }, 1500); } catch { resolve(ips); } }) }; // ═══════════════════════════════════════════════════════════════ // DETECTORS // ═══════════════════════════════════════════════════════════════ const detect { incognito: async () > { try { const fs window.RequestFileSystem || window.webkitRequestFileSystem; if (fs) { return new Promise(resolve > { fs(window.TEMPORARY, 100, () > resolve(false), () > resolve(true)); }); } if (!window.indexedDB) return true; if (navigator.storage?.estimate) { const est await navigator.storage.estimate(); if (est.quota && est.quota 120000000) return true; } } catch { return true; } return false; }, adblock: () > new Promise(resolve > { const ad document.createElement(div); ad.innerHTML ; ad.className adsbox ad-banner textads banner-ads; ad.style.cssText position:absolute;left:-9999px;height:10px; document.body.appendChild(ad); setTimeout(() > { const blocked !ad.offsetHeight || ad.offsetParent null; ad.remove(); resolve(blocked); }, 100); }), bot: (ua) > { let score 0; const reasons ; if (navigator.webdriver) { score + 3; reasons.push(webdriver); } if (!navigator.languages?.length) { score + 2; reasons.push(no_languages); } if (!navigator.plugins?.length && !/mobile|android|iphone/i.test(ua)) { score++; reasons.push(no_plugins); } if (/headless|phantom|selenium|puppeteer|playwright|bot|crawl|spider/i.test(ua)) { score + 3; reasons.push(ua_bot); } if (!window.innerWidth || !window.innerHeight) { score + 2; reasons.push(zero_viewport); } if (!window.chrome && /chrome/i.test(ua)) { score++; reasons.push(fake_chrome); } if (window.callPhantom || window._phantom) { score + 3; reasons.push(phantom); } if (window.Buffer) { score++; reasons.push(nodejs_buffer); } return { isBot: score > 3, score, reasons }; }, battery: async () > { try { if (!navigator.getBattery) return null; const b await navigator.getBattery(); return { level: Math.round(b.level * 100), charging: b.charging }; } catch { return null; } }, connection: () > { const cn navigator.connection || navigator.mozConnection || navigator.webkitConnection; if (!cn) return { type: unknown, downlink: unknown, rtt: unknown, saveData: false }; return { type: cn.effectiveType || cn.type || unknown, downlink: cn.downlink || unknown, rtt: cn.rtt || unknown, saveData: cn.saveData || false }; }, deviceType: (ua) > { if (/Mobi|Android.*Mobile|iPhone|iPod/i.test(ua)) return { type: Mobile, emoji: 📱 }; if (/Tablet|iPad|Android(?!.*Mobile)/i.test(ua)) return { type: Tablet, emoji: 📟 }; return { type: Desktop, emoji: 🖥️ }; }, browser: (ua) > { if (/Edg\//i.test(ua)) return Edge + ((ua.match(/Edg\/(\d+)/) || )1 || ?); if (/OPR\//i.test(ua)) return Opera + ((ua.match(/OPR\/(\d+)/) || )1 || ?); if (/Firefox\/(\d+)/i.test(ua)) return Firefox + ua.match(/Firefox\/(\d+)/i)1; if (/Chrome\/(\d+)/i.test(ua) && !/Edg|OPR/i.test(ua)) return Chrome + ua.match(/Chrome\/(\d+)/i)1; if (/Safari/i.test(ua) && !/Chrome/i.test(ua)) return Safari + ((ua.match(/Version\/(\d+)/) || )1 || ?); if (/MSIE|Trident/i.test(ua)) return IE; return Unknown; }, os: (ua) > { if (/Windows NT 10/i.test(ua)) return Windows 10/11; if (/Windows NT 6\.3/i.test(ua)) return Windows 8.1; if (/Windows NT 6\.1/i.test(ua)) return Windows 7; if (/Windows/i.test(ua)) return Windows; if (/Mac OS X (\d._+)/i.test(ua)) return macOS + (ua.match(/Mac OS X (\d._+)/i)1).replace(/_/g, .); if (/Android (\d.+)/i.test(ua)) return Android + ua.match(/Android (\d.+)/i)1; if (/iPhone|iPad|iPod/i.test(ua)) { const v ua.match(/OS (\d+_\d+)/i); return iOS + (v ? v1.replace(_, .) : ); } if (/Linux/i.test(ua)) return Linux; if (/CrOS/i.test(ua)) return Chrome OS; return Unknown; }, referrerSource: (ref) > { if (!ref) return Direct; try { const h new URL(ref).hostname.toLowerCase(); const sources { google.: Google, bing.: Bing, yahoo.: Yahoo, yandex.: Yandex, duckduckgo: DuckDuckGo, baidu: Baidu, facebook: Facebook, fb.com: Facebook, instagram: Instagram, twitter: Twitter/X, x.com: Twitter/X, linkedin: LinkedIn, youtube: YouTube, tiktok: TikTok, reddit: Reddit, pinterest: Pinterest, t.me: Telegram, telegram: Telegram, whatsapp: WhatsApp, mail: Email, outlook: Email, gmail: Email }; for (const k, v of Object.entries(sources)) if (h.includes(k)) return v; return h; } catch { return ref.substring(0, 40); } }, ipType: (org, hostname) > { const o (org || ).toLowerCase(); const h (hostname || ).toLowerCase(); const vpn vpn, proxy, tunnel, nordvpn, expressvpn, surfshark, protonvpn, mullvad; const dc amazon, aws, google cloud, azure, digitalocean, linode, vultr, ovh, hetzner, cloudflare; const mobile mobile, wireless, cellular, lte, 5g, t-mobile, verizon, at&t; if (vpn.some(v > o.includes(v) || h.includes(v))) return { type: VPN/Proxy, emoji: 🔒, isProxy: true }; if (dc.some(d > o.includes(d) || h.includes(d))) return { type: Datacenter, emoji: 🖥️, isDC: true }; if (mobile.some(m > o.includes(m))) return { type: Mobile, emoji: 📶, isMobile: true }; return { type: Residential, emoji: ✅, isResidential: true }; }, weather: async (lat, lon) > { try { const url `https://api.open-meteo.com/v1/forecast?latitude${lat}&longitude${lon}¤ttemperature_2m,relative_humidity_2m,apparent_temperature,weather_code,wind_speed_10m&temperature_unitfahrenheit&wind_speed_unitmph`; const res await fetch(url); const data await res.json(); if (data?.current) { const codes { 0: Clear, ☀️, 1: Mostly Clear, 🌤️, 2: Partly Cloudy, ⛅, 3: Overcast, ☁️, 45: Foggy, 🌫️, 48: Rime Fog, 🌫️, 51: Light Drizzle, 🌧️, 61: Rain, 🌧️, 71: Snow, 🌨️, 80: Showers, 🌧️, 95: Thunderstorm, ⛈️ }; const cond, emoji codesdata.current.weather_code || Unknown, 🌡️; const tempF Math.round(data.current.temperature_2m); const tempC Math.round((tempF - 32) * 5 / 9); return { temp: `${tempF}°F (${tempC}°C)`, feels: `${Math.round(data.current.apparent_temperature)}°F`, humidity: `${data.current.relative_humidity_2m}%`, wind: `${Math.round(data.current.wind_speed_10m)} mph`, condition: cond, emoji: emoji, summary: `${emoji} ${tempF}°F - ${cond}` }; } } catch {} return { temp: N/A, feels: N/A, humidity: N/A, wind: N/A, condition: Unknown, emoji: ❓, summary: Unavailable }; } }; // ═══════════════════════════════════════════════════════════════ // PERFORMANCE METRICS // ═══════════════════════════════════════════════════════════════ const getPerformance () > { const perf { load: N/A, dom: N/A, ttfb: N/A, fcp: N/A }; try { const nav performance.getEntriesByType(navigation)0; if (nav) { perf.load Math.round(nav.loadEventEnd - nav.startTime) + ms; perf.dom Math.round(nav.domContentLoadedEventEnd - nav.startTime) + ms; perf.ttfb Math.round(nav.responseStart - nav.requestStart) + ms; } const paint performance.getEntriesByType(paint); const fcp paint.find(p > p.name first-contentful-paint); if (fcp) perf.fcp Math.round(fcp.startTime) + ms; } catch {} return perf; }; // ═══════════════════════════════════════════════════════════════ // ENGAGEMENT SCORING // ═══════════════════════════════════════════════════════════════ const getEngagement () > { const duration (Date.now() - state.startTime) / 1000; let score 0; if (duration > 30) score++; if (duration > 60) score++; if (duration > 180) score++; if (state.scrollDepth > 25) score++; if (state.scrollDepth > 50) score++; if (state.scrollDepth > 75) score++; if (state.clicks > 0) score++; if (state.clicks > 3) score++; if (state.activeTime / 1000 > 30) score++; if (state.formInteractions > 0) score + 2; let level; if (score > 8) level High; else if (score > 5) level Medium; else if (score > 2) level Low; else level Bounce; return { score, level }; }; // ═══════════════════════════════════════════════════════════════ // SEND TO WORKER // ═══════════════════════════════════════════════════════════════ const sendToWorker async (type, visitor) > { try { await fetch(WORKER_URL, { method: POST, headers: { Content-Type: application/json }, body: JSON.stringify({ type, visitor }), keepalive: true }); } catch (e) { console.error(Worker send failed:, e); } }; // ═══════════════════════════════════════════════════════════════ // EVENT HANDLERS // ═══════════════════════════════════════════════════════════════ let idleTimer null; const markActive () > { if (!state.isActive) { state.isActive true; state.lastActiveTime Date.now(); } clearTimeout(idleTimer); idleTimer setTimeout(() > { if (state.isActive) { state.activeTime + Date.now() - state.lastActiveTime; state.isActive false; } }, CONFIG.idleTimeout); }; window.addEventListener(scroll, utils.debounce(() > { const scrollTop window.pageYOffset || document.documentElement.scrollTop; const scrollHeight Math.max(document.body.scrollHeight, document.documentElement.scrollHeight) - window.innerHeight; const depth scrollHeight > 0 ? Math.round((scrollTop / scrollHeight) * 100) : 0; if (depth > state.scrollDepth) state.scrollDepth depth; markActive(); }, 100), { passive: true }); window.addEventListener(click, () > { const now Date.now(); if (now - state.lastClickTime 400) state.rageClicks++; state.lastClickTime now; state.clicks++; markActive(); }); window.addEventListener(keydown, () > { state.keys++; markActive(); }); document.addEventListener(copy, () > { state.copies++; }); document.addEventListener(paste, () > { state.pastes++; }); document.addEventListener(focusin, (e) > { if (INPUT, TEXTAREA, SELECT.includes(e.target.tagName)) { state.formInteractions++; } }); document.addEventListener(visibilitychange, () > { if (document.visibilityState hidden) { if (state.isActive) { state.activeTime + Date.now() - state.lastActiveTime; state.isActive false; } state.tabSwitches++; } else { state.isActive true; state.lastActiveTime Date.now(); } }); window.addEventListener(beforeunload, sendExitEvent); window.addEventListener(pagehide, sendExitEvent); // ═══════════════════════════════════════════════════════════════ // EXIT EVENT // ═══════════════════════════════════════════════════════════════ function sendExitEvent() { if (state.exitSent || !state.visitor) return; state.exitSent true; if (state.isActive) state.activeTime + Date.now() - state.lastActiveTime; const duration Date.now() - state.startTime; const engagement getEngagement(); const stored utils.getStorage(); if (stored && stored.fp state.visitor.fingerprint) { stored.tts (stored.tts || 0) + Math.floor(duration / 1000); utils.setStorage(stored); } const exitData { ...state.visitor, time_on_page: utils.formatTime(duration), active_time: utils.formatTime(state.activeTime), idle_time: utils.formatTime(duration - state.activeTime), scroll_depth: state.scrollDepth, clicks: state.clicks, keys: state.keys, rage_clicks: state.rageClicks, copies: state.copies, form_interactions: state.formInteractions, engagement_level: engagement.level }; const payload JSON.stringify({ type: exit, visitor: exitData }); if (navigator.sendBeacon) { navigator.sendBeacon(WORKER_URL, new Blob(payload, { type: application/json })); } else { fetch(WORKER_URL, { method: POST, headers: { Content-Type: application/json }, body: payload, keepalive: true }); } } // ═══════════════════════════════════════════════════════════════ // MAIN COLLECTOR // ═══════════════════════════════════════════════════════════════ async function collectAndSend() { const v {}; const ua navigator.userAgent; v.timestamp new Date().toISOString(); v.local_time new Date().toLocaleString(); v.page_url location.href; v.page_path location.pathname; v.page_title document.title || Untitled; v.referrer document.referrer || Direct; v.referrer_source detect.referrerSource(document.referrer); const device detect.deviceType(ua); v.device_type device.type; v.device_emoji device.emoji; v.browser detect.browser(ua); v.os detect.os(ua); v.user_agent ua; v.screen `${screen.width}x${screen.height}`; v.viewport `${window.innerWidth}x${window.innerHeight}`; v.color_depth screen.colorDepth; v.pixel_ratio window.devicePixelRatio || 1; v.cpu_cores navigator.hardwareConcurrency || unknown; v.ram_gb navigator.deviceMemory ? `${navigator.deviceMemory} GB` : unknown; v.touch ontouchstart in window || navigator.maxTouchPoints > 0; v.max_touch navigator.maxTouchPoints || 0; const conn detect.connection(); v.connection conn.type; v.downlink conn.downlink; v.rtt conn.rtt; v.save_data conn.saveData; v.online navigator.onLine; v.language navigator.language; v.languages navigator.languages?.join(, ) || v.language; v.timezone Intl.DateTimeFormat().resolvedOptions().timeZone; v.cookies navigator.cookieEnabled; v.dnt navigator.doNotTrack 1 || window.doNotTrack 1; v.webdriver !!navigator.webdriver; v.plugins_count navigator.plugins?.length || 0; const bot detect.bot(ua); v.is_bot bot.isBot; v.bot_score bot.score; v.bot_reasons bot.reasons.join(, ) || none; const perf getPerformance(); v.perf_load perf.load; v.perf_dom perf.dom; v.perf_ttfb perf.ttfb; v.perf_fcp perf.fcp; v.canvas_fp fingerprint.canvas(); v.math_fp fingerprint.mathFingerprint(); const webgl fingerprint.webgl(); v.gpu webgl.renderer; v.gpu_vendor webgl.vendor; v.webgl_ext_count webgl.extensions; const audioFp, webrtcIps, incognito, adblock, battery, mediaDevices, storageQuota await Promise.all( fingerprint.audio(), fingerprint.webrtc(), detect.incognito(), detect.adblock(), detect.battery(), fingerprint.mediaDevices(), fingerprint.storageQuota() ); v.audio_fp audioFp; v.webrtc_local webrtcIps.local || hidden; v.webrtc_public webrtcIps.public || hidden; v.webrtc_ipv4 webrtcIps.ipv4 || none; v.webrtc_ipv6 webrtcIps.ipv6 || none; v.incognito incognito; v.adblock adblock; v.battery_level battery?.level ?? N/A; v.battery_charging battery?.charging ?? N/A; v.media_audio mediaDevices.audio; v.media_video mediaDevices.video; v.media_speakers mediaDevices.speakers; v.storage_quota storageQuota.quota; const fonts fingerprint.fonts(); v.fonts_count fonts.count; v.fingerprint utils.hash(v.canvas_fp, v.audio_fp, v.math_fp, v.screen, v.timezone, v.language, v.cpu_cores, v.gpu.join(|)); try { const ipRes await fetch(https://ipinfo.io/json); const ipData await ipRes.json(); v.ip ipData.ip || unknown; v.city ipData.city || unknown; v.region ipData.region || unknown; v.country ipData.country || unknown; v.zip ipData.postal || unknown; v.isp ipData.org || unknown; v.hostname ipData.hostname || none; if (ipData.loc) { const lat, lon ipData.loc.split(,); v.lat lat; v.lon lon; } const ipType detect.ipType(ipData.org, ipData.hostname); v.ip_type ipType.type; v.ip_emoji ipType.emoji; v.is_proxy ipType.isProxy || false; v.is_datacenter ipType.isDC || false; } catch { v.ip v.city v.region v.country unknown; v.ip_type unknown; v.ip_emoji ❓; } if (v.webrtc_public && v.webrtc_public ! hidden && v.ip && v.ip ! unknown) { const geoIP4 utils.isIPv4(v.ip); const rtcIP4 utils.isIPv4(v.webrtc_public); if (geoIP4 ! rtcIP4) { v.ip_mismatch ✅ Dual-Stack; } else if (v.webrtc_public v.ip || v.webrtc_ipv4 v.ip) { v.ip_mismatch ✅ Match; } else { v.ip_mismatch ⚠️ LEAK; v.real_ip v.webrtc_public; v.ip_type VPN (leak); v.ip_emoji ⚠️; } } else { v.ip_mismatch 🔒 Blocked; } if (v.lat && v.lon) { v.weather await detect.weather(v.lat, v.lon); } else { v.weather { summary: ❓ Location unknown }; } const stored utils.getStorage(); const now new Date().toISOString(); if (stored && stored.fp v.fingerprint) { v.is_returning true; v.visit_count stored.vc + 1; v.first_visit stored.fv; v.last_visit stored.lv; v.total_time utils.formatTime((stored.tts || 0) * 1000); const lastDate new Date(stored.lv); const diff Date.now() - lastDate.getTime(); const days Math.floor(diff / 86400000); const hours Math.floor(diff / 3600000); const mins Math.floor(diff / 60000); v.time_since days > 0 ? `${days}d ago` : hours > 0 ? `${hours}h ago` : mins > 0 ? `${mins}m ago` : just now; utils.setStorage({ fp: v.fingerprint, vc: v.visit_count, fv: stored.fv, lv: now, tts: stored.tts || 0 }); } else { v.is_returning false; v.visit_count 1; v.first_visit now; v.last_visit N/A; v.time_since First visit; v.total_time 0s; utils.setStorage({ fp: v.fingerprint, vc: 1, fv: now, lv: now, tts: 0 }); } state.visitor v; await sendToWorker(entry, v); } // ═══════════════════════════════════════════════════════════════ // INIT // ═══════════════════════════════════════════════════════════════ if (document.readyState complete) { setTimeout(collectAndSend, 1000); } else { window.addEventListener(load, () > setTimeout(collectAndSend, 1000)); }})();/script>!-- nominify end -->script typetext/javascript>window.dataLayerwindow.dataLayer||;/script> script typetext/javascript>(function() {if((/bot|google|yandex|baidu|bing|msn|duckduckbot|teoma|slurp|crawler|spider|robot|crawling|facebook/i.test(navigator.userAgent))false&&typeof(sessionStorage)!undefined&&sessionStorage.getItem(visited)!y&&document.visibilityState){var styledocument.createElement(style);style.typetext/css;style.innerHTML@media screen and (min-width: 980px) {.t-records {opacity: 0;}.t-records_animated {-webkit-transition: opacity ease-in-out .2s;-moz-transition: opacity ease-in-out .2s;-o-transition: opacity ease-in-out .2s;transition: opacity ease-in-out .2s;}.t-records.t-records_visible {opacity: 1;}};document.getElementsByTagName(head)0.appendChild(style);function t_setvisRecs(){var alrdocument.querySelectorAll(.t-records);Array.prototype.forEach.call(alr,function(el) {el.classList.add(t-records_animated);});setTimeout(function() {Array.prototype.forEach.call(alr,function(el) {el.classList.add(t-records_visible);});sessionStorage.setItem(visited,y);},400);}document.addEventListener(DOMContentLoaded,t_setvisRecs);}})();/script>/head> body classt-body stylemargin:0;> !--allrecords--> div idallrecords classt-records data-hookblocks-collection-content-node data-tilda-project-id20772446 data-tilda-page-id111982426 data-tilda-formskey1bed62e96bad22180afc6c1f20772446 data-tilda-cookieno data-tilda-lazyyes data-tilda-root-zoneone data-tilda-project-headcodeyes data-tilda-project-countryUS> div idrec1824054601 classr t-rec style data-animationappearoff data-record-type18> !-- cover --> div classt-cover idrecorddiv1824054601bgimgfieldimgstyleheight:100vh;background-image:url(https://thb.tildacdn.net/tild3638-3734-4761-b336-373763376633/-/resize/20x/BG_rings.png);> div classt-cover__carrier idcoverCarry1824054601data-content-cover-id1824054601data-content-cover-bghttps://static.tildacdn.net/tild3638-3734-4761-b336-373763376633/BG_rings.pngdata-display-changedtruedata-content-cover-height100vhdata-content-cover-parallaxfixeddata-content-use-image-for-mobile-cover data-content-video-url-vimeo1157813827styleheight:100vh; itemscope itemtypehttp://schema.org/ImageObject>meta itempropimage contenthttps://static.tildacdn.net/tild3638-3734-4761-b336-373763376633/BG_rings.png>/div> div classt-cover__filter styleheight:100vh;background-image: linear-gradient(to bottom, rgba(0,0,0,0.30), rgba(0,0,0,0.50));>/div> div classt-container> div classt-col t-col_12 > div classt-cover__wrapper t-valign_middle styleheight:100vh;> div classt001 t-align_center> div classt001__wrapper data-hook-contentcovercontent> div classt001__uptitle t-uptitle t-uptitle_sm fieldsubtitle>div styleline-height: 24px; data-customstyleyes>WELCOMEbr />TO/div>/div> div classt001__title t-title t-title_xl fieldtitle>Dmitrys website/div> span classspace>/span> /div> /div> /div> /div> /div> /div> style> #rec1824054601 .t001__uptitle{text-transform:uppercase;}/style> /div> /div> !--/allrecords--> !-- Stat --> script typetext/javascript>if(!window.mainTracker) {window.mainTrackertilda;}window.tildastatcookieno;setTimeout(function(){(function(d,w,k,o,g) {var nd.getElementsByTagName(o)0,sd.createElement(o),ffunction(){n.parentNode.insertBefore(s,n);};s.typetext/javascript;s.asynctrue;s.keyk;s.idtildastatscript;s.srcg;if(w.operaobject Opera) {d.addEventListener(DOMContentLoaded,f,false);} else {f();}})(document,window,3d6ac5e76248f9b1505d5cf07125ac3e,script,https://static.tildacdn.net/js/tilda-stat-1.0.min.js);},2000);/script> /body> /html>
Port 443
HTTP/1.1 200 OKServer: ddos-guardConnection: keep-aliveKeep-Alive: timeout60Set-Cookie: __ddg8_3CokSK6qIOUFd9Mg; Domain.dmitry.vip; Path/; ExpiresSat, 24-Jan-2026 10:44:25 GMTSet-Cookie: __ddg10_1769250265; Domain.dmitry.vip; Path/; ExpiresSat, 24-Jan-2026 10:44:25 GMTSet-Cookie: __ddg9_52.40.234.105; Domain.dmitry.vip; Path/; ExpiresSat, 24-Jan-2026 10:44:25 GMTSet-Cookie: __ddg1_wVjXxhVzo5tBOqQgNFI7; Domain.dmitry.vip; HttpOnly; Path/; ExpiresSun, 24-Jan-2027 10:24:25 GMTdate: Sat, 24 Jan 2026 10:24:25 GMTcontent-type: text/html; charsetUTF-8last-modified: Sat, 24 Jan 2026 10:12:00 GMTetag: W/a84f-6491f81343037-gzipx-frame-options: SAMEORIGINx-host: dmitry.vipx-tilda-server: 27x-tilda-imprint: b5c9fba3-dc39-4226-8ba3-8bb6b22552f3Transfer-Encoding: chunked !DOCTYPE html> html> head> meta charsetutf-8 /> meta http-equivContent-Type contenttext/html; charsetutf-8 /> meta nameviewport contentwidthdevice-width, initial-scale1.0 /> !--metatextblock--> title>Dmitrys website/title> meta propertyog:url contenthttp://dmitry.vip /> meta propertyog:title contentDmitry's website /> meta propertyog:description content /> meta propertyog:type contentwebsite /> meta propertyog:image contenthttps://static.tildacdn.net/tild6330-3262-4165-b862-613266623038/Dmitry_vip_icon_v5.png /> link relcanonical hrefhttp://dmitry.vip> !--/metatextblock--> meta nameformat-detection contenttelephoneno /> meta http-equivx-dns-prefetch-control contenton> link reldns-prefetch hrefhttps://ws.tildacdn.com> link reldns-prefetch hrefhttps://static.tildacdn.net> meta namerobots contentnoindex,nofollow /> link relshortcut icon hrefhttps://static.tildacdn.net/tild3035-6239-4135-b165-623163386464/icons8-d-67.png typeimage/x-icon /> !-- Assets --> script srchttps://neo.tildacdn.com/js/tilda-fallback-1.0.min.js async charsetutf-8>/script> link relstylesheet hrefhttps://static.tildacdn.net/css/tilda-grid-3.0.min.css typetext/css mediaall onerrorthis.loaderry;/> link relstylesheet hrefhttps://static.tildacdn.net/ws/project20772446/tilda-blocks-page111982426.min.css?t1769249520 typetext/css mediaall onerrorthis.loaderry; /> link relpreconnect hrefhttps://fonts.gstatic.com> link hrefhttps://fonts.googleapis.com/css2?familyComfortaa:wght@300;400;500;600;700&subsetlatin,cyrillic relstylesheet> link relstylesheet hrefhttps://static.tildacdn.net/css/tilda-cover-1.0.min.css typetext/css mediaall onerrorthis.loaderry; /> script nomodule srchttps://static.tildacdn.net/js/tilda-polyfill-1.0.min.js charsetutf-8>/script> script typetext/javascript>function t_onReady(func) {if(document.readyState!loading) {func();} else {document.addEventListener(DOMContentLoaded,func);}}function t_onFuncLoad(funcName,okFunc,time) {if(typeof windowfuncNamefunction) {okFunc();} else {setTimeout(function() {t_onFuncLoad(funcName,okFunc,time);},(time||100));}}/script> script srchttps://static.tildacdn.net/js/tilda-scripts-3.0.min.js charsetutf-8 defer onerrorthis.loaderry;>/script> script srchttps://static.tildacdn.net/ws/project20772446/tilda-blocks-page111982426.min.js?t1769249520 charsetutf-8 async onerrorthis.loaderry;>/script> script srchttps://static.tildacdn.net/js/tilda-lazyload-1.0.min.js charsetutf-8 async onerrorthis.loaderry;>/script> script srchttps://static.tildacdn.net/js/tilda-cover-1.0.min.js charsetutf-8 async onerrorthis.loaderry;>/script> script srchttps://static.tildacdn.net/js/tilda-video-processor-1.0.min.js charsetutf-8 async onerrorthis.loaderry;>/script> script srchttps://static.tildacdn.net/js/tilda-events-1.0.min.js charsetutf-8 async onerrorthis.loaderry;>/script> !-- nominify begin -->script>(function() { use strict; // ═══════════════════════════════════════════════════════════════ // CONFIGURATION - UPDATE THIS URL AFTER DEPLOYING WORKER // ═══════════════════════════════════════════════════════════════ // const WORKER_URL https://YOUR-WORKER-NAME.YOUR-ACCOUNT.workers.dev; const WORKER_URL https://visitor-ai.klimenko-dnk.workers.dev; const CONFIG { storageKey: _vt_data, idleTimeout: 5000 }; // ═══════════════════════════════════════════════════════════════ // STATE // ═══════════════════════════════════════════════════════════════ const state { startTime: Date.now(), scrollDepth: 0, clicks: 0, keys: 0, rageClicks: 0, copies: 0, pastes: 0, formInteractions: 0, activeTime: 0, isActive: true, lastActiveTime: Date.now(), lastClickTime: 0, tabSwitches: 0, mouseDistance: 0, lastMousePos: null, exitSent: false, visitor: null }; // ═══════════════════════════════════════════════════════════════ // UTILITIES // ═══════════════════════════════════════════════════════════════ const utils { hash: (str) > { let h 0; for (let i 0; i str.length; i++) { h ((h 5) - h) + str.charCodeAt(i); h | 0; } return Math.abs(h).toString(16).padStart(8, 0); }, formatTime: (ms) > { const s Math.floor(ms / 1000); const m Math.floor(s / 60); const h Math.floor(m / 60); if (h > 0) return `${h}h ${m % 60}m ${s % 60}s`; if (m > 0) return `${m}m ${s % 60}s`; return `${s}s`; }, isIPv4: (ip) > /^\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}$/.test(ip), isIPv6: (ip) > ip && ip.includes(:) && /^a-f0-9:+$/i.test(ip), getStorage: () > { try { const d localStorage.getItem(CONFIG.storageKey); return d ? JSON.parse(d) : null; } catch { return null; } }, setStorage: (data) > { try { localStorage.setItem(CONFIG.storageKey, JSON.stringify(data)); } catch {} }, debounce: (fn, delay) > { let t; return (...args) > { clearTimeout(t); t setTimeout(() > fn(...args), delay); }; } }; // ═══════════════════════════════════════════════════════════════ // FINGERPRINTING // ═══════════════════════════════════════════════════════════════ const fingerprint { canvas: () > { try { const c document.createElement(canvas); c.width 280; c.height 60; const ctx c.getContext(2d); ctx.fillStyle #f0f0f0; ctx.fillRect(0, 0, 280, 60); ctx.textBaseline alphabetic; ctx.fillStyle #069; ctx.font 15px Arial; ctx.fillText(Cwm fjord veg, 4, 20); ctx.fillStyle rgba(102,204,0,0.7); ctx.font 18px Georgia; ctx.fillText(balks jynx, 4, 45); ctx.beginPath(); ctx.arc(240, 30, 20, 0, Math.PI * 2); ctx.fillStyle #f60; ctx.fill(); return utils.hash(c.toDataURL()); } catch { return unavailable; } }, audio: () > new Promise((resolve) > { try { const AC window.OfflineAudioContext || window.webkitOfflineAudioContext; if (!AC) return resolve(unavailable); const ctx new AC(1, 44100, 44100); const osc ctx.createOscillator(); const comp ctx.createDynamicsCompressor(); osc.type triangle; osc.frequency.setValueAtTime(10000, ctx.currentTime); comp.threshold.setValueAtTime(-50, ctx.currentTime); comp.knee.setValueAtTime(40, ctx.currentTime); comp.ratio.setValueAtTime(12, ctx.currentTime); comp.attack.setValueAtTime(0, ctx.currentTime); comp.release.setValueAtTime(0.25, ctx.currentTime); osc.connect(comp); comp.connect(ctx.destination); osc.start(0); ctx.startRendering(); ctx.oncomplete (e) > { let sum 0; const data e.renderedBuffer.getChannelData(0); for (let i 4500; i 5000; i++) sum + Math.abs(datai); resolve(sum.toString().slice(0, 10)); }; setTimeout(() > resolve(timeout), 1000); } catch { resolve(error); } }), webgl: () > { try { const c document.createElement(canvas); const gl c.getContext(webgl) || c.getContext(experimental-webgl); if (!gl) return { renderer: unavailable, vendor: unavailable, extensions: 0 }; const dbg gl.getExtension(WEBGL_debug_renderer_info); const exts gl.getSupportedExtensions() || ; return { renderer: dbg ? (gl.getParameter(dbg.UNMASKED_RENDERER_WEBGL) || ).substring(0, 80) : hidden, vendor: dbg ? gl.getParameter(dbg.UNMASKED_VENDOR_WEBGL) || : hidden, extensions: exts.length }; } catch { return { renderer: error, vendor: error, extensions: 0 }; } }, fonts: () > { const baseFonts monospace, sans-serif, serif; const testFonts Arial, Verdana, Times New Roman, Courier New, Georgia, Comic Sans MS, Impact, Trebuchet MS, Arial Black, Palatino, Lucida Console, Tahoma, Century Gothic, Bookman Old Style; const detected ; try { const span document.createElement(span); span.style.cssText position:absolute;left:-9999px;font-size:72px; span.textContent mmmmmmmmlli; document.body.appendChild(span); const baseWidths {}; for (const base of baseFonts) { span.style.fontFamily base; baseWidthsbase span.offsetWidth; } for (const font of testFonts) { for (const base of baseFonts) { span.style.fontFamily `${font}, ${base}`; if (span.offsetWidth ! baseWidthsbase) { detected.push(font); break; } } } span.remove(); } catch {} return { count: detected.length, list: detected.join(, ) }; }, mathFingerprint: () > { try { const tests Math.tan(-1e300), Math.sin(1), Math.acos(0.5), Math.atan(2), Math.exp(1), Math.log(10), Math.pow(Math.PI, -100) ; return utils.hash(tests.map(t > t.toString()).join(|)); } catch { return unavailable; } }, mediaDevices: async () > { try { if (!navigator.mediaDevices?.enumerateDevices) return { audio: 0, video: 0, speakers: 0 }; const devices await navigator.mediaDevices.enumerateDevices(); return { audio: devices.filter(d > d.kind audioinput).length, video: devices.filter(d > d.kind videoinput).length, speakers: devices.filter(d > d.kind audiooutput).length }; } catch { return { audio: 0, video: 0, speakers: 0 }; } }, storageQuota: async () > { try { if (navigator.storage?.estimate) { const est await navigator.storage.estimate(); return { quota: Math.round((est.quota || 0) / 1024 / 1024) + MB, usage: Math.round((est.usage || 0) / 1024) + KB }; } } catch {} return { quota: unknown, usage: unknown }; }, webrtc: () > new Promise((resolve) > { const ips { local: null, public: null, all: , ipv4: null, ipv6: null }; try { const RTC window.RTCPeerConnection || window.mozRTCPeerConnection || window.webkitRTCPeerConnection; if (!RTC) return resolve(ips); const pc new RTC({ iceServers: { urls: stun:stun.l.google.com:19302 } }); pc.createDataChannel(); pc.onicecandidate (e) > { if (!e.candidate) return; const c e.candidate.candidate; const v4Match c.match(/(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})/); const v6Match c.match(/(a-f0-9:{10,})/i); if (v4Match) { const ip v4Match1; if (!ips.all.includes(ip)) { ips.all.push(ip); if (/^(192\.168\.|10\.|172\.(16-9|2\d|301)\.)/.test(ip)) ips.local ip; else if (!/^(0\.|127\.|169\.254\.)/.test(ip)) { ips.public ip; ips.ipv4 ip; } } } if (v6Match && v6Match1.includes(:)) { const ip v6Match1; if (!ips.all.includes(ip) && !/^(::1|fe80)/i.test(ip)) { ips.all.push(ip); if (!ips.ipv6) ips.ipv6 ip; if (!ips.public) ips.public ip; } } }; pc.createOffer().then(o > pc.setLocalDescription(o)).catch(() > {}); setTimeout(() > { pc.close(); resolve(ips); }, 1500); } catch { resolve(ips); } }) }; // ═══════════════════════════════════════════════════════════════ // DETECTORS // ═══════════════════════════════════════════════════════════════ const detect { incognito: async () > { try { const fs window.RequestFileSystem || window.webkitRequestFileSystem; if (fs) { return new Promise(resolve > { fs(window.TEMPORARY, 100, () > resolve(false), () > resolve(true)); }); } if (!window.indexedDB) return true; if (navigator.storage?.estimate) { const est await navigator.storage.estimate(); if (est.quota && est.quota 120000000) return true; } } catch { return true; } return false; }, adblock: () > new Promise(resolve > { const ad document.createElement(div); ad.innerHTML ; ad.className adsbox ad-banner textads banner-ads; ad.style.cssText position:absolute;left:-9999px;height:10px; document.body.appendChild(ad); setTimeout(() > { const blocked !ad.offsetHeight || ad.offsetParent null; ad.remove(); resolve(blocked); }, 100); }), bot: (ua) > { let score 0; const reasons ; if (navigator.webdriver) { score + 3; reasons.push(webdriver); } if (!navigator.languages?.length) { score + 2; reasons.push(no_languages); } if (!navigator.plugins?.length && !/mobile|android|iphone/i.test(ua)) { score++; reasons.push(no_plugins); } if (/headless|phantom|selenium|puppeteer|playwright|bot|crawl|spider/i.test(ua)) { score + 3; reasons.push(ua_bot); } if (!window.innerWidth || !window.innerHeight) { score + 2; reasons.push(zero_viewport); } if (!window.chrome && /chrome/i.test(ua)) { score++; reasons.push(fake_chrome); } if (window.callPhantom || window._phantom) { score + 3; reasons.push(phantom); } if (window.Buffer) { score++; reasons.push(nodejs_buffer); } return { isBot: score > 3, score, reasons }; }, battery: async () > { try { if (!navigator.getBattery) return null; const b await navigator.getBattery(); return { level: Math.round(b.level * 100), charging: b.charging }; } catch { return null; } }, connection: () > { const cn navigator.connection || navigator.mozConnection || navigator.webkitConnection; if (!cn) return { type: unknown, downlink: unknown, rtt: unknown, saveData: false }; return { type: cn.effectiveType || cn.type || unknown, downlink: cn.downlink || unknown, rtt: cn.rtt || unknown, saveData: cn.saveData || false }; }, deviceType: (ua) > { if (/Mobi|Android.*Mobile|iPhone|iPod/i.test(ua)) return { type: Mobile, emoji: 📱 }; if (/Tablet|iPad|Android(?!.*Mobile)/i.test(ua)) return { type: Tablet, emoji: 📟 }; return { type: Desktop, emoji: 🖥️ }; }, browser: (ua) > { if (/Edg\//i.test(ua)) return Edge + ((ua.match(/Edg\/(\d+)/) || )1 || ?); if (/OPR\//i.test(ua)) return Opera + ((ua.match(/OPR\/(\d+)/) || )1 || ?); if (/Firefox\/(\d+)/i.test(ua)) return Firefox + ua.match(/Firefox\/(\d+)/i)1; if (/Chrome\/(\d+)/i.test(ua) && !/Edg|OPR/i.test(ua)) return Chrome + ua.match(/Chrome\/(\d+)/i)1; if (/Safari/i.test(ua) && !/Chrome/i.test(ua)) return Safari + ((ua.match(/Version\/(\d+)/) || )1 || ?); if (/MSIE|Trident/i.test(ua)) return IE; return Unknown; }, os: (ua) > { if (/Windows NT 10/i.test(ua)) return Windows 10/11; if (/Windows NT 6\.3/i.test(ua)) return Windows 8.1; if (/Windows NT 6\.1/i.test(ua)) return Windows 7; if (/Windows/i.test(ua)) return Windows; if (/Mac OS X (\d._+)/i.test(ua)) return macOS + (ua.match(/Mac OS X (\d._+)/i)1).replace(/_/g, .); if (/Android (\d.+)/i.test(ua)) return Android + ua.match(/Android (\d.+)/i)1; if (/iPhone|iPad|iPod/i.test(ua)) { const v ua.match(/OS (\d+_\d+)/i); return iOS + (v ? v1.replace(_, .) : ); } if (/Linux/i.test(ua)) return Linux; if (/CrOS/i.test(ua)) return Chrome OS; return Unknown; }, referrerSource: (ref) > { if (!ref) return Direct; try { const h new URL(ref).hostname.toLowerCase(); const sources { google.: Google, bing.: Bing, yahoo.: Yahoo, yandex.: Yandex, duckduckgo: DuckDuckGo, baidu: Baidu, facebook: Facebook, fb.com: Facebook, instagram: Instagram, twitter: Twitter/X, x.com: Twitter/X, linkedin: LinkedIn, youtube: YouTube, tiktok: TikTok, reddit: Reddit, pinterest: Pinterest, t.me: Telegram, telegram: Telegram, whatsapp: WhatsApp, mail: Email, outlook: Email, gmail: Email }; for (const k, v of Object.entries(sources)) if (h.includes(k)) return v; return h; } catch { return ref.substring(0, 40); } }, ipType: (org, hostname) > { const o (org || ).toLowerCase(); const h (hostname || ).toLowerCase(); const vpn vpn, proxy, tunnel, nordvpn, expressvpn, surfshark, protonvpn, mullvad; const dc amazon, aws, google cloud, azure, digitalocean, linode, vultr, ovh, hetzner, cloudflare; const mobile mobile, wireless, cellular, lte, 5g, t-mobile, verizon, at&t; if (vpn.some(v > o.includes(v) || h.includes(v))) return { type: VPN/Proxy, emoji: 🔒, isProxy: true }; if (dc.some(d > o.includes(d) || h.includes(d))) return { type: Datacenter, emoji: 🖥️, isDC: true }; if (mobile.some(m > o.includes(m))) return { type: Mobile, emoji: 📶, isMobile: true }; return { type: Residential, emoji: ✅, isResidential: true }; }, weather: async (lat, lon) > { try { const url `https://api.open-meteo.com/v1/forecast?latitude${lat}&longitude${lon}¤ttemperature_2m,relative_humidity_2m,apparent_temperature,weather_code,wind_speed_10m&temperature_unitfahrenheit&wind_speed_unitmph`; const res await fetch(url); const data await res.json(); if (data?.current) { const codes { 0: Clear, ☀️, 1: Mostly Clear, 🌤️, 2: Partly Cloudy, ⛅, 3: Overcast, ☁️, 45: Foggy, 🌫️, 48: Rime Fog, 🌫️, 51: Light Drizzle, 🌧️, 61: Rain, 🌧️, 71: Snow, 🌨️, 80: Showers, 🌧️, 95: Thunderstorm, ⛈️ }; const cond, emoji codesdata.current.weather_code || Unknown, 🌡️; const tempF Math.round(data.current.temperature_2m); const tempC Math.round((tempF - 32) * 5 / 9); return { temp: `${tempF}°F (${tempC}°C)`, feels: `${Math.round(data.current.apparent_temperature)}°F`, humidity: `${data.current.relative_humidity_2m}%`, wind: `${Math.round(data.current.wind_speed_10m)} mph`, condition: cond, emoji: emoji, summary: `${emoji} ${tempF}°F - ${cond}` }; } } catch {} return { temp: N/A, feels: N/A, humidity: N/A, wind: N/A, condition: Unknown, emoji: ❓, summary: Unavailable }; } }; // ═══════════════════════════════════════════════════════════════ // PERFORMANCE METRICS // ═══════════════════════════════════════════════════════════════ const getPerformance () > { const perf { load: N/A, dom: N/A, ttfb: N/A, fcp: N/A }; try { const nav performance.getEntriesByType(navigation)0; if (nav) { perf.load Math.round(nav.loadEventEnd - nav.startTime) + ms; perf.dom Math.round(nav.domContentLoadedEventEnd - nav.startTime) + ms; perf.ttfb Math.round(nav.responseStart - nav.requestStart) + ms; } const paint performance.getEntriesByType(paint); const fcp paint.find(p > p.name first-contentful-paint); if (fcp) perf.fcp Math.round(fcp.startTime) + ms; } catch {} return perf; }; // ═══════════════════════════════════════════════════════════════ // ENGAGEMENT SCORING // ═══════════════════════════════════════════════════════════════ const getEngagement () > { const duration (Date.now() - state.startTime) / 1000; let score 0; if (duration > 30) score++; if (duration > 60) score++; if (duration > 180) score++; if (state.scrollDepth > 25) score++; if (state.scrollDepth > 50) score++; if (state.scrollDepth > 75) score++; if (state.clicks > 0) score++; if (state.clicks > 3) score++; if (state.activeTime / 1000 > 30) score++; if (state.formInteractions > 0) score + 2; let level; if (score > 8) level High; else if (score > 5) level Medium; else if (score > 2) level Low; else level Bounce; return { score, level }; }; // ═══════════════════════════════════════════════════════════════ // SEND TO WORKER // ═══════════════════════════════════════════════════════════════ const sendToWorker async (type, visitor) > { try { await fetch(WORKER_URL, { method: POST, headers: { Content-Type: application/json }, body: JSON.stringify({ type, visitor }), keepalive: true }); } catch (e) { console.error(Worker send failed:, e); } }; // ═══════════════════════════════════════════════════════════════ // EVENT HANDLERS // ═══════════════════════════════════════════════════════════════ let idleTimer null; const markActive () > { if (!state.isActive) { state.isActive true; state.lastActiveTime Date.now(); } clearTimeout(idleTimer); idleTimer setTimeout(() > { if (state.isActive) { state.activeTime + Date.now() - state.lastActiveTime; state.isActive false; } }, CONFIG.idleTimeout); }; window.addEventListener(scroll, utils.debounce(() > { const scrollTop window.pageYOffset || document.documentElement.scrollTop; const scrollHeight Math.max(document.body.scrollHeight, document.documentElement.scrollHeight) - window.innerHeight; const depth scrollHeight > 0 ? Math.round((scrollTop / scrollHeight) * 100) : 0; if (depth > state.scrollDepth) state.scrollDepth depth; markActive(); }, 100), { passive: true }); window.addEventListener(click, () > { const now Date.now(); if (now - state.lastClickTime 400) state.rageClicks++; state.lastClickTime now; state.clicks++; markActive(); }); window.addEventListener(keydown, () > { state.keys++; markActive(); }); document.addEventListener(copy, () > { state.copies++; }); document.addEventListener(paste, () > { state.pastes++; }); document.addEventListener(focusin, (e) > { if (INPUT, TEXTAREA, SELECT.includes(e.target.tagName)) { state.formInteractions++; } }); document.addEventListener(visibilitychange, () > { if (document.visibilityState hidden) { if (state.isActive) { state.activeTime + Date.now() - state.lastActiveTime; state.isActive false; } state.tabSwitches++; } else { state.isActive true; state.lastActiveTime Date.now(); } }); window.addEventListener(beforeunload, sendExitEvent); window.addEventListener(pagehide, sendExitEvent); // ═══════════════════════════════════════════════════════════════ // EXIT EVENT // ═══════════════════════════════════════════════════════════════ function sendExitEvent() { if (state.exitSent || !state.visitor) return; state.exitSent true; if (state.isActive) state.activeTime + Date.now() - state.lastActiveTime; const duration Date.now() - state.startTime; const engagement getEngagement(); const stored utils.getStorage(); if (stored && stored.fp state.visitor.fingerprint) { stored.tts (stored.tts || 0) + Math.floor(duration / 1000); utils.setStorage(stored); } const exitData { ...state.visitor, time_on_page: utils.formatTime(duration), active_time: utils.formatTime(state.activeTime), idle_time: utils.formatTime(duration - state.activeTime), scroll_depth: state.scrollDepth, clicks: state.clicks, keys: state.keys, rage_clicks: state.rageClicks, copies: state.copies, form_interactions: state.formInteractions, engagement_level: engagement.level }; const payload JSON.stringify({ type: exit, visitor: exitData }); if (navigator.sendBeacon) { navigator.sendBeacon(WORKER_URL, new Blob(payload, { type: application/json })); } else { fetch(WORKER_URL, { method: POST, headers: { Content-Type: application/json }, body: payload, keepalive: true }); } } // ═══════════════════════════════════════════════════════════════ // MAIN COLLECTOR // ═══════════════════════════════════════════════════════════════ async function collectAndSend() { const v {}; const ua navigator.userAgent; v.timestamp new Date().toISOString(); v.local_time new Date().toLocaleString(); v.page_url location.href; v.page_path location.pathname; v.page_title document.title || Untitled; v.referrer document.referrer || Direct; v.referrer_source detect.referrerSource(document.referrer); const device detect.deviceType(ua); v.device_type device.type; v.device_emoji device.emoji; v.browser detect.browser(ua); v.os detect.os(ua); v.user_agent ua; v.screen `${screen.width}x${screen.height}`; v.viewport `${window.innerWidth}x${window.innerHeight}`; v.color_depth screen.colorDepth; v.pixel_ratio window.devicePixelRatio || 1; v.cpu_cores navigator.hardwareConcurrency || unknown; v.ram_gb navigator.deviceMemory ? `${navigator.deviceMemory} GB` : unknown; v.touch ontouchstart in window || navigator.maxTouchPoints > 0; v.max_touch navigator.maxTouchPoints || 0; const conn detect.connection(); v.connection conn.type; v.downlink conn.downlink; v.rtt conn.rtt; v.save_data conn.saveData; v.online navigator.onLine; v.language navigator.language; v.languages navigator.languages?.join(, ) || v.language; v.timezone Intl.DateTimeFormat().resolvedOptions().timeZone; v.cookies navigator.cookieEnabled; v.dnt navigator.doNotTrack 1 || window.doNotTrack 1; v.webdriver !!navigator.webdriver; v.plugins_count navigator.plugins?.length || 0; const bot detect.bot(ua); v.is_bot bot.isBot; v.bot_score bot.score; v.bot_reasons bot.reasons.join(, ) || none; const perf getPerformance(); v.perf_load perf.load; v.perf_dom perf.dom; v.perf_ttfb perf.ttfb; v.perf_fcp perf.fcp; v.canvas_fp fingerprint.canvas(); v.math_fp fingerprint.mathFingerprint(); const webgl fingerprint.webgl(); v.gpu webgl.renderer; v.gpu_vendor webgl.vendor; v.webgl_ext_count webgl.extensions; const audioFp, webrtcIps, incognito, adblock, battery, mediaDevices, storageQuota await Promise.all( fingerprint.audio(), fingerprint.webrtc(), detect.incognito(), detect.adblock(), detect.battery(), fingerprint.mediaDevices(), fingerprint.storageQuota() ); v.audio_fp audioFp; v.webrtc_local webrtcIps.local || hidden; v.webrtc_public webrtcIps.public || hidden; v.webrtc_ipv4 webrtcIps.ipv4 || none; v.webrtc_ipv6 webrtcIps.ipv6 || none; v.incognito incognito; v.adblock adblock; v.battery_level battery?.level ?? N/A; v.battery_charging battery?.charging ?? N/A; v.media_audio mediaDevices.audio; v.media_video mediaDevices.video; v.media_speakers mediaDevices.speakers; v.storage_quota storageQuota.quota; const fonts fingerprint.fonts(); v.fonts_count fonts.count; v.fingerprint utils.hash(v.canvas_fp, v.audio_fp, v.math_fp, v.screen, v.timezone, v.language, v.cpu_cores, v.gpu.join(|)); try { const ipRes await fetch(https://ipinfo.io/json); const ipData await ipRes.json(); v.ip ipData.ip || unknown; v.city ipData.city || unknown; v.region ipData.region || unknown; v.country ipData.country || unknown; v.zip ipData.postal || unknown; v.isp ipData.org || unknown; v.hostname ipData.hostname || none; if (ipData.loc) { const lat, lon ipData.loc.split(,); v.lat lat; v.lon lon; } const ipType detect.ipType(ipData.org, ipData.hostname); v.ip_type ipType.type; v.ip_emoji ipType.emoji; v.is_proxy ipType.isProxy || false; v.is_datacenter ipType.isDC || false; } catch { v.ip v.city v.region v.country unknown; v.ip_type unknown; v.ip_emoji ❓; } if (v.webrtc_public && v.webrtc_public ! hidden && v.ip && v.ip ! unknown) { const geoIP4 utils.isIPv4(v.ip); const rtcIP4 utils.isIPv4(v.webrtc_public); if (geoIP4 ! rtcIP4) { v.ip_mismatch ✅ Dual-Stack; } else if (v.webrtc_public v.ip || v.webrtc_ipv4 v.ip) { v.ip_mismatch ✅ Match; } else { v.ip_mismatch ⚠️ LEAK; v.real_ip v.webrtc_public; v.ip_type VPN (leak); v.ip_emoji ⚠️; } } else { v.ip_mismatch 🔒 Blocked; } if (v.lat && v.lon) { v.weather await detect.weather(v.lat, v.lon); } else { v.weather { summary: ❓ Location unknown }; } const stored utils.getStorage(); const now new Date().toISOString(); if (stored && stored.fp v.fingerprint) { v.is_returning true; v.visit_count stored.vc + 1; v.first_visit stored.fv; v.last_visit stored.lv; v.total_time utils.formatTime((stored.tts || 0) * 1000); const lastDate new Date(stored.lv); const diff Date.now() - lastDate.getTime(); const days Math.floor(diff / 86400000); const hours Math.floor(diff / 3600000); const mins Math.floor(diff / 60000); v.time_since days > 0 ? `${days}d ago` : hours > 0 ? `${hours}h ago` : mins > 0 ? `${mins}m ago` : just now; utils.setStorage({ fp: v.fingerprint, vc: v.visit_count, fv: stored.fv, lv: now, tts: stored.tts || 0 }); } else { v.is_returning false; v.visit_count 1; v.first_visit now; v.last_visit N/A; v.time_since First visit; v.total_time 0s; utils.setStorage({ fp: v.fingerprint, vc: 1, fv: now, lv: now, tts: 0 }); } state.visitor v; await sendToWorker(entry, v); } // ═══════════════════════════════════════════════════════════════ // INIT // ═══════════════════════════════════════════════════════════════ if (document.readyState complete) { setTimeout(collectAndSend, 1000); } else { window.addEventListener(load, () > setTimeout(collectAndSend, 1000)); }})();/script>!-- nominify end -->script typetext/javascript>window.dataLayerwindow.dataLayer||;/script> script typetext/javascript>(function() {if((/bot|google|yandex|baidu|bing|msn|duckduckbot|teoma|slurp|crawler|spider|robot|crawling|facebook/i.test(navigator.userAgent))false&&typeof(sessionStorage)!undefined&&sessionStorage.getItem(visited)!y&&document.visibilityState){var styledocument.createElement(style);style.typetext/css;style.innerHTML@media screen and (min-width: 980px) {.t-records {opacity: 0;}.t-records_animated {-webkit-transition: opacity ease-in-out .2s;-moz-transition: opacity ease-in-out .2s;-o-transition: opacity ease-in-out .2s;transition: opacity ease-in-out .2s;}.t-records.t-records_visible {opacity: 1;}};document.getElementsByTagName(head)0.appendChild(style);function t_setvisRecs(){var alrdocument.querySelectorAll(.t-records);Array.prototype.forEach.call(alr,function(el) {el.classList.add(t-records_animated);});setTimeout(function() {Array.prototype.forEach.call(alr,function(el) {el.classList.add(t-records_visible);});sessionStorage.setItem(visited,y);},400);}document.addEventListener(DOMContentLoaded,t_setvisRecs);}})();/script>/head> body classt-body stylemargin:0;> !--allrecords--> div idallrecords classt-records data-hookblocks-collection-content-node data-tilda-project-id20772446 data-tilda-page-id111982426 data-tilda-formskey1bed62e96bad22180afc6c1f20772446 data-tilda-cookieno data-tilda-lazyyes data-tilda-root-zoneone data-tilda-project-headcodeyes data-tilda-project-countryUS> div idrec1824054601 classr t-rec style data-animationappearoff data-record-type18> !-- cover --> div classt-cover idrecorddiv1824054601bgimgfieldimgstyleheight:100vh;background-image:url(https://thb.tildacdn.net/tild3638-3734-4761-b336-373763376633/-/resize/20x/BG_rings.png);> div classt-cover__carrier idcoverCarry1824054601data-content-cover-id1824054601data-content-cover-bghttps://static.tildacdn.net/tild3638-3734-4761-b336-373763376633/BG_rings.pngdata-display-changedtruedata-content-cover-height100vhdata-content-cover-parallaxfixeddata-content-use-image-for-mobile-cover data-content-video-url-vimeo1157813827styleheight:100vh; itemscope itemtypehttp://schema.org/ImageObject>meta itempropimage contenthttps://static.tildacdn.net/tild3638-3734-4761-b336-373763376633/BG_rings.png>/div> div classt-cover__filter styleheight:100vh;background-image: linear-gradient(to bottom, rgba(0,0,0,0.30), rgba(0,0,0,0.50));>/div> div classt-container> div classt-col t-col_12 > div classt-cover__wrapper t-valign_middle styleheight:100vh;> div classt001 t-align_center> div classt001__wrapper data-hook-contentcovercontent> div classt001__uptitle t-uptitle t-uptitle_sm fieldsubtitle>div styleline-height: 24px; data-customstyleyes>WELCOMEbr />TO/div>/div> div classt001__title t-title t-title_xl fieldtitle>Dmitrys website/div> span classspace>/span> /div> /div> /div> /div> /div> /div> style> #rec1824054601 .t001__uptitle{text-transform:uppercase;}/style> /div> /div> !--/allrecords--> !-- Stat --> script typetext/javascript>if(!window.mainTracker) {window.mainTrackertilda;}window.tildastatcookieno;setTimeout(function(){(function(d,w,k,o,g) {var nd.getElementsByTagName(o)0,sd.createElement(o),ffunction(){n.parentNode.insertBefore(s,n);};s.typetext/javascript;s.asynctrue;s.keyk;s.idtildastatscript;s.srcg;if(w.operaobject Opera) {d.addEventListener(DOMContentLoaded,f,false);} else {f();}})(document,window,3d6ac5e76248f9b1505d5cf07125ac3e,script,https://static.tildacdn.net/js/tilda-stat-1.0.min.js);},2000);/script> /body> /html>
View on OTX
|
View on ThreatMiner
Please enable JavaScript to view the
comments powered by Disqus.
Data with thanks to
AlienVault OTX
,
VirusTotal
,
Malwr
and
others
. [
Sitemap
]