1(self.webpackChunk_N_E=self.webpackChunk_N_E||[]).push([[3034],{24915:(e,s,t)=>{"use strict";function i(e){let s=e.toUpperCase();return/^[A-Z]{2}$/.test(s)?String.fromCodePoint(...[...s].map(e=>127462+e.charCodeAt(0)-65)):""}t.d(s,{R:()=>i})},43034:(e,s,t)=>{"use strict";t.r(s),t.d(s,{IpLookup:()=>j});var i=t(56464),a=t(86012),r=t(20387);let n={name:"globe",size:24,node:[["circle",{cx:"12",cy:"12",r:"10",key:"1mglay"}],["path",{d:"M12 2a14.5 14.5 0 0 0 0 20 14.5 14.5 0 0 0 0-20",key:"13o1zl"}],["path",{d:"M2 12h20",key:"9i4pu4"}]]};n.node;let l=(0,r.A)(n);var o=t(29843),c=t(71332),d=t(32870);let p={name:"network",size:24,node:[["rect",{x:"16",y:"16",width:"6",height:"6",rx:"1",key:"4q2zg0"}],["rect",{x:"2",y:"16",width:"6",height:"6",rx:"1",key:"8cvhb9"}],["rect",{x:"9",y:"2",width:"6",height:"6",rx:"1",key:"1egb70"}],["path",{d:"M5 16v-3a1 1 0 0 1 1-1h12a1 1 0 0 1 1 1v3",key:"1jsf9p"}],["path",{d:"M12 12V8",key:"2874zd"}]]};p.node;let h=(0,r.A)(p),u={name:"monitor",size:24,node:[["rect",{width:"20",height:"14",x:"2",y:"3",rx:"2",key:"48i651"}],["line",{x1:"8",x2:"16",y1:"21",y2:"21",key:"1svkeh"}],["line",{x1:"12",x2:"12",y1:"17",y2:"21",key:"vw1qmm"}]]};u.node;let m=(0,r.A)(u);t(45001);var x=t(24915);function y({items:e}){return(0,i.jsx)("dl",{className:"ip-details",children:e.map(([e,s])=>(0,i.jsxs)("div",{children:[(0,i.jsx)("dt",{children:e}),(0,i.jsx)("dd",{children:s??"Not available"})]},e))})}function j(){let[e,s]=(0,a.useState)(null),[t,r]=(0,a.useState)(!0),[n,p]=(0,a.useState)(""),[u,j]=(0,a.useState)(!1),[b,g]=(0,a.useState)(""),[v,k]=(0,a.useState)(""),[N,f]=(0,a.useState)(null),[w,P]=(0,a.useState)([]),[S,I]=(0,a.useState)(null),[C,z]=(0,a.useState)(!1),A=(0,a.useRef)(null);async function L(s){A.current?.abort();let t=new AbortController;A.current=t,j(!0),g(""),f(null),k("");try{let i=await fetch("/api/ip-lookup",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({ip:s.trim()}),signal:t.signal}),a=await i.json();if(!i.ok)throw Error(a.error||"Lookup failed. Please try again.");f(a),a.ip===e&&I(a)}catch(e){t.signal.aborted||g(e instanceof Error?e.message:"Lookup failed. Please try again.")}finally{t.signal.aborted||j(!1)}}async function O(e){try{await navigator.clipboard.writeText(e),k("Copied "+e)}catch{k("Copy is unavailable. Select the address and copy it manually.")}}return(0,a.useEffect)(()=>{let e=new AbortController;return fetch("/api/ip-lookup",{cache:"no-store",signal:e.signal}).then(e=>e.ok?e.json():Promise.reject()).then(async t=>{if(!e.signal.aborted&&(s(t.ip||null),r(!1),t.ip)){z(!0);try{let s=await fetch("/api/ip-lookup",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({ip:t.ip}),signal:e.signal});if(s.ok){let t=await s.json();e.signal.aborted||I(t)}}finally{e.signal.aborted||z(!1)}}}).catch(()=>{}).finally(()=>{e.signal.aborted||r(!1)}),P([["Browser identification",navigator.userAgent],["Language",navigator.language],["Browser time zone",Intl.DateTimeFormat().resolvedOptions().timeZone],["Screen size",`${screen.width} \xd7 ${screen.height} CSS pixels`]]),()=>{e.abort(),A.current?.abort()}},[]),(0,i.jsxs)("div",{className:"ip-tool",children:[(0,i.jsxs)("section",{className:"ip-hero panel","aria-labelledby":"my-ip-title",children:[(0,i.jsxs)("div",{children:[(0,i.jsxs)("span",{className:"eyebrow",children:[(0,i.jsx)(l,{size:16})," YOUR CONNECTION"]}),(0,i.jsx)("h2",{id:"my-ip-title",children:"Your public IP address"}),(0,i.jsx)("p",{className:"ip-address","aria-live":"polite",children:t?"Detectingâ¦":e||"Not available in this connection"}),e&&(0,i.jsx)("div",{className:"ip-own-location","aria-live":"polite",children:C?(0,i.jsx)("span",{children:"Finding approximate locationâ¦"}):(0,i.jsxs)(i.Fragment,{children:[S?.countryCode&&(0,i.jsx)("span",{className:"ip-country-flag","aria-hidden":"true",children:(0,x.R)(S.countryCode)}),(0,i.jsxs)("div",{children:[(0,i.jsx)("strong",{children:S?.country||"Country unavailable"}),(0,i.jsx)("span",{children:S?.city||"City unavailable"})]})]})}),(0,i.jsxs)("p",{className:"small-text",children:["The address used to reach Genory",e?` over ${e.includes(":")?"IPv6":"IPv4"}`:"",". A VPN or proxy may change it. This does not test both IP versions."]})]}),(0,i.jsxs)("p",{className:"small-text",children:["Approximate country and city are loaded automatically via ",(0,i.jsx)("a",{href:"https://ipwhois.io/privacy",target:"_blank",rel:"noreferrer",children:"IPWHOIS"})," using your public IP. This is not your precise location."]}),e&&(0,i.jsxs)("div",{className:"ip-actions",children:[(0,i.jsxs)("button",{className:"button secondary",onClick:()=>O(e),children:[(0,i.jsx)(o.A,{size:16})," Copy my IP"]}),(0,i.jsx)("button",{className:"button primary",disabled:u,onClick:()=>{p(e),L(e)},children:"Look up my IP"})]}),!t&&!e&&(0,i.jsx)("p",{className:"small-text",children:"Automatic detection requires a trusted public connection. You can still enter an IP below."})]}),(0,i.jsxs)("section",{className:"panel ip-search","aria-labelledby":"lookup-title",children:[(0,i.jsxs)("h2",{id:"lookup-title",children:[(0,i.jsx)(c.A,{size:21})," Look up an IP address"]}),(0,i.jsx)("p",{children:"Explore the approximate location and network behind a public IPv4 or IPv6 address."}),(0,i.jsxs)("form",{onSubmit:e=>{e.preventDefault(),L(n)},children:[(0,i.jsx)("label",{htmlFor:"ip-address-input",children:"Public IP address"}),(0,i.jsxs)("div",{className:"ip-input-row",children:[(0,i.jsx)("input",{id:"ip-address-input",value:n,onChange:e=>p(e.target.value),placeholder:"e.g. 8.8.8.8 or 2606:4700:4700::1111",maxLength:64,required:!0,spellCheck:!1,autoComplete:"off"}),(0,i.jsx)("button",{className:"button primary",disabled:u||!n.trim(),type:"submit",children:u?"Looking upâ¦":"Look up IP"})]})]}),(0,i.jsxs)("p",{className:"small-text",children:["Your public IP is looked up automatically. Manual lookups send the selected IP to ",(0,i.jsx)("a",{href:"https://ipwhois.io/privacy",target:"_blank",rel:"noreferrer",children:"IPWHOIS"})," for location and network data, and queries reverse DNS for a hostname. Results are cached in server memory for up to 15 minutes. Browser details stay in your browser. Free to use; request limits apply."]})]}),(0,i.jsx)("div",{role:"status",className:"small-text",children:v||(u?"Fetching location and network detailsâ¦":"")}),b&&(0,i.jsx)("p",{role:"alert",className:"ip-error",children:b}),N&&(0,i.jsxs)("section",{"aria-label":"IP lookup results",className:"ip-results",children:[(0,i.jsxs)("div",{className:"ip-result-title",children:[(0,i.jsxs)("div",{children:[(0,i.jsxs)("span",{className:"eyebrow",children:["LOOKUP RESULT \xb7 IPv",N.version]}),(0,i.jsx)("h2",{children:N.ip})]}),(0,i.jsxs)("button",{className:"button secondary",onClick:()=>O(N.ip),children:[(0,i.jsx)(o.A,{size:16})," Copy result IP"]})]}),(0,i.jsxs)("div",{className:"ip-grid",children:[(0,i.jsxs)("section",{className:"panel",children:[(0,i.jsxs)("h3",{children:[(0,i.jsx)(d.A,{size:20}
1)," Approximate location"]}),(0,i.jsx)(y,{items:[["Country",N.country],["Region",N.region],["City",N.city],["Time zone",N.timezone],["Latitude",N.latitude],["Longitude",N.longitude]]})]}),(0,i.jsxs)("section",{className:"panel",children:[(0,i.jsxs)("h3",{children:[(0,i.jsx)(h,{size:20})," Network"]}),(0,i.jsx)(y,{items:[["Internet provider",N.isp],["Organization",N.organization],["ASN",null===N.asn?null:`AS${N.asn}`],["Hostname (reverse DNS)",N.hostname],["IP version",`IPv${N.version}`]]})]})]}),(0,i.jsxs)("p",{className:"small-text",children:["Source: ",(0,i.jsx)("a",{href:"https://ipwhois.io",target:"_blank",rel:"noreferrer",children:"IPWHOIS"})," and DNS. Retrieved ",new Date(N.checkedAt).toLocaleString(),". IP locations are estimates, not a street address or a personâs exact location. Missing fields mean the information was not available. This tool does not detect VPNs or DNS/WebRTC leaks."]})]}),(0,i.jsxs)("section",{className:"panel ip-browser",children:[(0,i.jsxs)("h2",{children:[(0,i.jsx)(m,{size:21})," Your browser"]}),(0,i.jsx)("p",{className:"small-text",children:"Reported by your browser; these values can be reduced or modified by privacy settings."}),w.length?(0,i.jsx)(y,{items:w}):(0,i.jsx)("p",{children:"Loading browser detailsâ¦"})]})]})}},45001:()=>{}}]);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.