{"id":2746,"date":"2026-08-17T18:57:16","date_gmt":"2026-08-17T18:57:16","guid":{"rendered":"https:\/\/bulkdapa.site\/?page_id=2746"},"modified":"2026-08-18T08:14:47","modified_gmt":"2026-08-18T08:14:47","slug":"bulk-ip-address-lookup-whats-my-ip-finder","status":"publish","type":"page","link":"https:\/\/bulkdapa.site\/hi\/bulk-ip-address-lookup-whats-my-ip-finder\/","title":{"rendered":"Bulk IP Address Lookup &#8211; What&#8217;s My IP Finder"},"content":{"rendered":"<div data-elementor-type=\"wp-page\" data-elementor-id=\"2746\" class=\"elementor elementor-2746\" data-elementor-post-type=\"page\">\n\t\t\t\t<div class=\"elementor-element elementor-element-2f6dbca e-flex e-con-boxed e-con e-parent\" data-id=\"2f6dbca\" data-element_type=\"container\" data-e-type=\"container\">\n\t\t\t\t\t<div class=\"e-con-inner\">\n\t\t\t\t<div class=\"elementor-element elementor-element-5799775 elementor-widget elementor-widget-shortcode\" data-id=\"5799775\" data-element_type=\"widget\" data-e-type=\"widget\" data-widget_type=\"shortcode.default\">\n\t\t\t\t\t\t\t<div class=\"elementor-shortcode\">\r\n<div class=\"ipl-wrap\" id=\"ipl-root\">\r\n\r\n\t<header class=\"ipl-head\">\r\n\t\t<span class=\"ipl-eyebrow\"><i><\/i>Live registry and geolocation data<\/span>\r\n\t\t<h1 class=\"ipl-title\">Free IP Lookup<span class=\"ipl-title-mark\">.<\/span><br><span class=\"ipl-title-sub\">Bulk IP Address Lookup &amp; What's My IP<\/span><\/h1>\r\n\t\t<p class=\"ipl-intro\">\u091a\u093f\u092a\u0915\u093e\u090f\u0901 <strong>10 IP addresses<\/strong> and pull country, city, coordinates, timezone, ASN, ISP and hostname in one pass. Or switch tabs and check your own IP on a live map.<\/p>\r\n\t<\/header>\r\n\r\n\t<div class=\"ipl-switch\" role=\"tablist\" aria-label=\"IP lookup modes\">\r\n\t\t<button type=\"button\" class=\"ipl-sw is-active\" id=\"ipl-tab-bulk\" data-panel=\"bulk\" role=\"tab\" aria-selected=\"true\" aria-controls=\"ipl-panel-bulk\">\r\n\t\t\t<span class=\"ipl-sw-idx\">01<\/span>\r\n\t\t\t<span class=\"ipl-sw-txt\">Bulk IP Address Lookup<\/span>\r\n\t\t<\/button>\r\n\t\t<button type=\"button\" class=\"ipl-sw\" id=\"ipl-tab-self\" data-panel=\"self\" role=\"tab\" aria-selected=\"false\" aria-controls=\"ipl-panel-self\">\r\n\t\t\t<span class=\"ipl-sw-idx\">02<\/span>\r\n\t\t\t<span class=\"ipl-sw-txt\">What's My IP<\/span>\r\n\t\t<\/button>\r\n\t<\/div>\r\n\r\n\t<section class=\"ipl-panel is-active\" id=\"ipl-panel-bulk\" role=\"tabpanel\" aria-labelledby=\"ipl-tab-bulk\">\r\n\r\n\t\t<div class=\"ipl-console\">\r\n\t\t\t<div class=\"ipl-console-bar\">\r\n\t\t\t\t<span class=\"ipl-console-label\">IP addresses<\/span>\r\n\t\t\t\t<span class=\"ipl-console-note\">one per line<\/span>\r\n\t\t\t\t<span class=\"ipl-chip\" id=\"ipl-count-chip\"><b id=\"ipl-count\">0<\/b> \/ 10<\/span>\r\n\t\t\t<\/div>\r\n\t\t\t<textarea id=\"ipl-input\" rows=\"8\" spellcheck=\"false\" autocomplete=\"off\" autocorrect=\"off\" autocapitalize=\"off\" placeholder=\"8.8.8.8&#10;1.1.1.1&#10;2001:4860:4860::8888\"><\/textarea>\r\n\t\t\t<div class=\"ipl-console-foot\">\r\n\t\t\t\t<button type=\"button\" id=\"ipl-run-bulk\" class=\"ipl-go\">\r\n\t\t\t\t\t<span>Run lookup<\/span>\r\n\t\t\t\t\t<svg viewbox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.4\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M5 12h13\"\/><path d=\"m12 5 7 7-7 7\"\/><\/svg>\r\n\t\t\t\t<\/button>\r\n\t\t\t\t<span class=\"ipl-foot-note\">IPv4 and IPv6 supported. Sourced from WHOIS registry records.<\/span>\r\n\t\t\t<\/div>\r\n\t\t<\/div>\r\n\r\n\t\t<div id=\"ipl-bulk-error\" class=\"ipl-alert\" style=\"display:none;\"><\/div>\r\n\r\n\t\t<div id=\"ipl-bulk-loader\" class=\"ipl-loading\" style=\"display:none;\">\r\n\t\t\t<span class=\"ipl-bars\"><i><\/i><i><\/i><i><\/i><i><\/i><\/span>\r\n\t\t\tResolving addresses\r\n\t\t<\/div>\r\n\r\n\t\t<div id=\"ipl-bulk-results\" style=\"display:none;\">\r\n\t\t\t<div class=\"ipl-toolbar\">\r\n\t\t\t\t<span class=\"ipl-toolbar-count\" id=\"ipl-result-count\"><\/span>\r\n\t\t\t\t<div class=\"ipl-toolbar-btns\">\r\n\t\t\t\t\t<button type=\"button\" id=\"ipl-copy-all\" class=\"ipl-tb-btn\">Copy all JSON<\/button>\r\n\t\t\t\t\t<button type=\"button\" id=\"ipl-download-csv\" class=\"ipl-tb-btn ipl-tb-solid\">Download CSV<\/button>\r\n\t\t\t\t<\/div>\r\n\t\t\t<\/div>\r\n\t\t\t<div class=\"ipl-grid\" id=\"ipl-bulk-grid\"><\/div>\r\n\t\t<\/div>\r\n\r\n\t<\/section>\r\n\r\n\t<section class=\"ipl-panel\" id=\"ipl-panel-self\" role=\"tabpanel\" aria-labelledby=\"ipl-tab-self\" hidden>\r\n\r\n\t\t<div id=\"ipl-self-loader\" class=\"ipl-loading\">\r\n\t\t\t<span class=\"ipl-bars\"><i><\/i><i><\/i><i><\/i><i><\/i><\/span>\r\n\t\t\tDetecting your public IP\r\n\t\t<\/div>\r\n\r\n\t\t<div id=\"ipl-self-error\" class=\"ipl-alert\" style=\"display:none;\"><\/div>\r\n\r\n\t\t<div id=\"ipl-self-wrap\" class=\"ipl-self\" style=\"display:none;\">\r\n\r\n\t\t\t<div class=\"ipl-self-top\">\r\n\t\t\t\t<span class=\"ipl-self-flag\" id=\"ipl-self-flag\"><\/span>\r\n\t\t\t\t<div class=\"ipl-self-main\">\r\n\t\t\t\t\t<span class=\"ipl-self-eyebrow\">Your public IP address<\/span>\r\n\t\t\t\t\t<div class=\"ipl-ipline\">\r\n\t\t\t\t\t\t<span class=\"ipl-self-ip\" id=\"ipl-self-ip\"><\/span>\r\n\t\t\t\t\t\t<button type=\"button\" class=\"ipl-ipcopy ipl-ipcopy-dark\" id=\"ipl-self-ipcopy\" aria-label=\"Copy IP address\" title=\"Copy IP address\">\r\n\t\t\t\t\t\t\t<svg viewbox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><rect x=\"9\" y=\"9\" width=\"12\" height=\"12\" rx=\"2.5\"\/><path d=\"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1\"\/><\/svg>\r\n\t\t\t\t\t\t<\/button>\r\n\t\t\t\t\t<\/div>\r\n\t\t\t\t\t<div class=\"ipl-self-place\" id=\"ipl-self-place\"><\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<button type=\"button\" class=\"ipl-refresh\" id=\"ipl-self-refresh\" title=\"Run the lookup again\">\r\n\t\t\t\t\t<svg viewbox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2.2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M21 12a9 9 0 1 1-2.64-6.36\"\/><path d=\"M21 3v6h-6\"\/><\/svg>\r\n\t\t\t\t<\/button>\r\n\t\t\t<\/div>\r\n\r\n\t\t\t<div class=\"ipl-self-body\">\r\n\t\t\t\t<div class=\"ipl-map-shell\">\r\n\t\t\t\t\t<iframe id=\"ipl-map-frame\" class=\"ipl-map-frame\" title=\"Approximate location of your IP address\" loading=\"lazy\" referrerpolicy=\"no-referrer\"><\/iframe>\r\n\t\t\t\t\t<div class=\"ipl-pin\" id=\"ipl-map-pin\" tabindex=\"0\">\r\n\t\t\t\t\t\t<span class=\"ipl-pin-tip\" id=\"ipl-pin-tip\"><\/span>\r\n\t\t\t\t\t\t<svg viewbox=\"0 0 24 32\" fill=\"none\" xmlns=\"http:\/\/www.w3.org\/2000\/svg\"><path d=\"M12 0C5.4 0 0 5.4 0 12c0 8.4 12 20 12 20s12-11.6 12-20c0-6.6-5.4-12-12-12z\" fill=\"#0a0a0a\"\/><circle cx=\"12\" cy=\"12\" r=\"4.6\" fill=\"#ffc521\"\/><\/svg>\r\n\t\t\t\t\t<\/div>\r\n\t\t\t\t\t<span class=\"ipl-coords\" id=\"ipl-map-coords\"><\/span>\r\n\t\t\t\t\t<div class=\"ipl-map-off\" id=\"ipl-map-off\" style=\"display:none;\">No coordinates were returned for this address.<\/div>\r\n\t\t\t\t<\/div>\r\n\t\t\t\t<div class=\"ipl-self-facts\" id=\"ipl-self-facts\"><\/div>\r\n\t\t\t<\/div>\r\n\r\n\t\t\t<div class=\"ipl-self-cta\">\r\n\t\t\t\t<button type=\"button\" class=\"ipl-cta\" id=\"ipl-self-copy\">Copy JSON<\/button>\r\n\t\t\t\t<a class=\"ipl-cta ipl-cta-solid\" id=\"ipl-self-maps\" href=\"#\" target=\"_blank\" rel=\"noopener nofollow\">View on Google Maps<\/a>\r\n\t\t\t<\/div>\r\n\r\n\t\t<\/div>\r\n\r\n\t<\/section>\r\n\r\n\t<div class=\"ipl-content ipl-related-top\">\r\n\t\t<h2>Related Tools<\/h2>\r\n\t\t<div class=\"ipl-related\">\r\n\t\t\t<a class=\"ipl-related-item\" href=\"https:\/\/bulkdapa.site\/hi\/\">\r\n\t\t\t\t<span class=\"ipl-related-name\">\u092c\u0932\u094d\u0915 \u0921\u0940\u090f \u092a\u0940\u090f \u091a\u0947\u0915\u0930<\/span>\r\n\t\t\t\t<span class=\"ipl-related-desc\">Domain and page authority scores for a batch of domains in one run.<\/span>\r\n\t\t\t<\/a>\r\n\t\t\t<a class=\"ipl-related-item\" href=\"https:\/\/bulkdapa.site\/hi\/free-bulk-backlink-checker-by-ahrefs\/\">\r\n\t\t\t\t<span class=\"ipl-related-name\">\u092c\u0932\u094d\u0915 \u092c\u0948\u0915\u0932\u093f\u0902\u0915 \u091a\u0947\u0915\u0930<\/span>\r\n\t\t\t\t<span class=\"ipl-related-desc\">Referring domains, backlinks and dofollow ratio pulled from Ahrefs data.<\/span>\r\n\t\t\t<\/a>\r\n\t\t\t<a class=\"ipl-related-item\" href=\"https:\/\/bulkdapa.site\/hi\/bulk-ahrefs-dr-checker\/\">\r\n\t\t\t\t<span class=\"ipl-related-name\">\u092c\u0932\u094d\u0915 Ahrefs DR \u091a\u0947\u0915\u0930<\/span>\r\n\t\t\t\t<span class=\"ipl-related-desc\">Domain Rating for multiple sites at once, with export ready output.<\/span>\r\n\t\t\t<\/a>\r\n\t\t\t<a class=\"ipl-related-item\" href=\"https:\/\/bulkdapa.site\/hi\/bulk-broken-link-checker\/\">\r\n\t\t\t\t<span class=\"ipl-related-name\">\u092c\u0932\u094d\u0915 \u092c\u094d\u0930\u094b\u0915\u0928 \u0932\u093f\u0902\u0915 \u091a\u0947\u0915\u0930<\/span>\r\n\t\t\t\t<span class=\"ipl-related-desc\">Find dead internal and external links across a list of URLs.<\/span>\r\n\t\t\t<\/a>\r\n\t\t\t<a class=\"ipl-related-item\" href=\"https:\/\/bulkdapa.site\/hi\/robots-txt-file-generator\/\">\r\n\t\t\t\t<span class=\"ipl-related-name\">Robots.txt \u091c\u0928\u0930\u0947\u091f\u0930<\/span>\r\n\t\t\t\t<span class=\"ipl-related-desc\">Build a valid robots.txt with crawl rules and sitemap directives.<\/span>\r\n\t\t\t<\/a>\r\n\t\t\t<a class=\"ipl-related-item\" href=\"https:\/\/bulkdapa.site\/hi\/bulk-webp-image-converter\/\">\r\n\t\t\t\t<span class=\"ipl-related-name\">Bulk WebP Converter<\/span>\r\n\t\t\t\t<span class=\"ipl-related-desc\">Convert images to WebP in batches to cut page weight and improve LCP.<\/span>\r\n\t\t\t<\/a>\r\n\t\t<\/div>\r\n\t<\/div>\r\n\r\n\t<article class=\"ipl-content\">\r\n\r\n\t\t<div class=\"ipl-answer\">\r\n\t\t\t<span class=\"ipl-answer-tag\">Quick answer<\/span>\r\n\t\t\t<p>Bulk IP Address Lookup is a free tool that lets you check multiple IPv4 and IPv6 addresses at once. It can return approximate location, ASN, ISP, organization, hostname, timezone, and other network information, with options to copy results as JSON or export them as CSV.<\/p>\r\n\t\t<\/div>\r\n\r\n\t\t<h2>Free IP Lookup for Single Addresses and Bulk Lists<\/h2>\r\n\t\t<p>Most IP tools do one job. This one does two, because the two questions almost always arrive together. You want to know who owns a list of addresses hitting your server, and you want to confirm what your own connection looks like from the outside.<\/p>\r\n\t\t<p>The first tab runs a bulk IP address lookup on up to 10 addresses in a single pass. The second tab is a plain ip address finder that reads the public address your browser is presenting right now and plots it on a map.<\/p>\r\n\t\t<p>Data is assembled from two independent layers. Ownership, ASN and organisation come from WHOIS records published by the regional internet registries. Approximate coordinates, city and postal code come from commercial geolocation databases that map announced ranges to physical service areas.<\/p>\r\n\r\n\t\t<h2>How the Bulk IP Address Lookup Works<\/h2>\r\n\t\t<p>Paste one address per line. Mixed IPv4 and IPv6 lists are fine, duplicates are removed before the query runs, and malformed lines are flagged individually instead of failing the whole batch.<\/p>\r\n\t\t<p>Each address returns its own result card. Two actions sit on every card. Copy JSON gives you a clean object for that single address, ready to drop into a ticket, a script or a log annotation. View on Google Maps opens the returned coordinates in a new tab so you can eyeball the neighbourhood.<\/p>\r\n\t\t<p>Above the results, Copy all JSON returns the full batch as an array, and Download CSV gives you a spreadsheet with one row per address. That combination is what makes a bulk public IP address lookup genuinely faster than checking addresses one at a time somewhere else.<\/p>\r\n\r\n\t\t<h3>Fields returned for every address<\/h3>\r\n\t\t<ul>\r\n\t\t\t<li><strong>\u0926\u0947\u0936<\/strong> with ISO country code and flag<\/li>\r\n\t\t\t<li><strong>Region or state<\/strong> \u0914\u0930 <strong>city<\/strong><\/li>\r\n\t\t\t<li><strong>Postal code<\/strong> where the database publishes one<\/li>\r\n\t\t\t<li><strong>Latitude and longitude<\/strong> for the approximate service area<\/li>\r\n\t\t\t<li><strong>Timezone<\/strong> in IANA format, such as America\/Los_Angeles<\/li>\r\n\t\t\t<li><strong>ASN<\/strong>, the autonomous system number announcing the range<\/li>\r\n\t\t\t<li><strong>Organisation and ISP<\/strong> holding the allocation<\/li>\r\n\t\t\t<li><strong>Hostname<\/strong> from the reverse DNS record, when one is published<\/li>\r\n\t\t<\/ul>\r\n\r\n\t\t<h2>What's My IP Address, Without the Guesswork<\/h2>\r\n\t\t<p>Open the second tab and the lookup runs immediately. No button, no input. The address shown is the public one your traffic exits from, which is the same address every website, API and firewall you touch will log.<\/p>\r\n\t\t<p>The map is a static preview centred on the returned coordinates. Hover the pin and a tooltip shows the address alongside its country, so you can check your location IP address at a glance before sharing a screenshot.<\/p>\r\n\t\t<p>If a VPN, proxy or corporate tunnel is active, the result reflects the exit node instead of your own line. That is not an error. It is the entire point of testing, and it is the fastest way to confirm a VPN is actually routing where you think it is.<\/p>\r\n\t\t<p>Mobile connections behave differently again. Carriers route large subscriber pools through a small number of regional gateways, so the city returned is often the gateway, not the tower you are connected to.<\/p>\r\n\r\n\t\t<h2>Reading Geolocation, ASN and ISP Data Properly<\/h2>\r\n\t\t<p>A dot on a map is the least useful field in the response. Network attribution is where the real signal lives, and the ASN is the field to read first.<\/p>\r\n\t\t<p>An autonomous system number identifies the operator that announces a range on the global routing table. That single number separates a residential broadband customer from a datacentre tenant, a cloud instance, a corporate range or a hosting provider. Traffic from a consumer ISP behaves nothing like traffic from a rented server, and the ASN tells you which one you are looking at long before the city does.<\/p>\r\n\t\t<p>Organisation and ISP add the human readable layer. When both fields name the same entity, the range is usually allocated and used directly. When they differ, the range has often been sub allocated or leased, which is common with hosting resellers and VPN operators.<\/p>\r\n\t\t<p>Hostname is the quiet tiebreaker. A reverse DNS record ending in a hosting provider's domain is a strong hint that the address belongs to a server rather than a person, and that changes how you treat the traffic in analytics or in a firewall rule.<\/p>\r\n\t\t<p>Registry ownership can always be verified independently through a regional internet registry such as <a href=\"https:\/\/www.ripe.net\/\" target=\"_blank\" rel=\"noopener nofollow\">RIPE NCC<\/a>, and a second geolocation opinion is worth taking from another <a href=\"https:\/\/www.iplocation.net\/ip-lookup\" target=\"_blank\" rel=\"noopener nofollow\">IP lookup tool<\/a> before you act on a borderline result.<\/p>\r\n\r\n\t\t<h2>Who Uses What's My IP and Bulk IP Lookup<\/h2>\r\n\t\t<p><strong>SEO and analytics teams<\/strong> filter internal traffic out of reports. Run the office, agency and client IP ranges through the bulk lookup, confirm the ASN, then exclude them at the property level so sessions stay clean.<\/p>\r\n\t\t<p><strong>Server administrators<\/strong> triage authentication logs. A block of failed logins usually resolves to a handful of hosting ASNs, and seeing that pattern in one screen is faster than checking twenty addresses by hand.<\/p>\r\n\t\t<p><strong>Support engineers<\/strong> confirm which region a customer connects from before blaming a CDN edge or a regional outage.<\/p>\r\n\t\t<p><strong>Performance and ad teams<\/strong> validate geo targeting. If a campaign is supposed to serve one country and the click IPs resolve to datacentre ranges elsewhere, the traffic quality question answers itself.<\/p>\r\n\t\t<p><strong>Developers<\/strong> test rate limit rules, CDN routing and IP allowlists during deployment, then use the what's my IP tab to confirm which address their own machine is presenting to the allowlist.<\/p>\r\n\r\n\t\t<h2>Accuracy, Limits and Disclaimer<\/h2>\r\n\t\t<p>Country level accuracy sits above 95 percent across the major providers. City level accuracy is a different story. It varies by carrier and can be wrong by hundreds of kilometres on mobile, satellite, VPN and corporate ranges, because the database is mapping an allocation to a routing hub, not a person to a street.<\/p>\r\n\t\t<p class=\"ipl-disclaimer\">This tool reports network level information only. It never identifies a person, a household, a device or a street address, and it cannot. Results are provided for network diagnostics, analytics, research and troubleshooting. Do not use them as the sole basis for blocking, billing, moderation, legal or law enforcement decisions. Always confirm ownership against the authoritative WHOIS record held by the responsible regional registry, and treat coordinates as an estimate of a service area rather than a location.<\/p>\r\n\r\n\t\t<h2>\u0905\u0915\u094d\u0938\u0930 \u092a\u0942\u091b\u0947 \u091c\u093e\u0928\u0947 \u0935\u093e\u0932\u0947 \u092a\u094d\u0930\u0936\u094d\u0928\u094b\u0902<\/h2>\r\n\r\n\t\t<div class=\"ipl-faq\">\r\n\r\n\t\t\t<details class=\"ipl-faq-item\">\r\n\t\t\t\t<summary>What is an IP lookup?<\/summary>\r\n\t\t\t\t<p>An IP lookup takes a public IP address and returns the network and location data registered against it, including country, region, city, postal code, coordinates, timezone, ASN, ISP, organisation and hostname.<\/p>\r\n\t\t\t<\/details>\r\n\r\n\t\t\t<details class=\"ipl-faq-item\">\r\n\t\t\t\t<summary>How many addresses can I run in one bulk IP lookup?<\/summary>\r\n\t\t\t\t<p>Up to 10 addresses per run. Paste one per line, mix IPv4 and IPv6 freely, and duplicates are stripped automatically before the query is sent.<\/p>\r\n\t\t\t<\/details>\r\n\r\n\t\t\t<details class=\"ipl-faq-item\">\r\n\t\t\t\t<summary>Where does the data come from?<\/summary>\r\n\t\t\t\t<p>Ownership, ASN and organisation details come from WHOIS records published by the regional internet registries. Approximate coordinates, city and postal code come from geolocation databases that map announced ranges to service areas.<\/p>\r\n\t\t\t<\/details>\r\n\r\n\t\t\t<details class=\"ipl-faq-item\">\r\n\t\t\t\t<summary>How accurate is the location?<\/summary>\r\n\t\t\t\t<p>Country accuracy is typically above 95 percent. City accuracy is considerably lower and depends on the carrier, because mobile, satellite and VPN networks route traffic through regional gateways far from the actual user.<\/p>\r\n\t\t\t<\/details>\r\n\r\n\t\t\t<details class=\"ipl-faq-item\">\r\n\t\t\t\t<summary>Why does what's my IP show a different city than mine?<\/summary>\r\n\t\t\t\t<p>Your ISP assigns addresses from a pool registered to a routing hub. Geolocation databases map the whole range to that hub, so the reported city is often the nearest exchange rather than the one you live in.<\/p>\r\n\t\t\t<\/details>\r\n\r\n\t\t\t<details class=\"ipl-faq-item\">\r\n\t\t\t\t<summary>Does the tool work with IPv6?<\/summary>\r\n\t\t\t\t<p>Yes. Full IPv6 addresses and shortened notation are both accepted, in bulk lists and in the single lookup, alongside IPv4 in the same batch.<\/p>\r\n\t\t\t<\/details>\r\n\r\n\t\t\t<details class=\"ipl-faq-item\">\r\n\t\t\t\t<summary>Can an IP address finder reveal someone's identity?<\/summary>\r\n\t\t\t\t<p>No. A public IP maps to a network operator and an approximate service area. Linking an address to a named subscriber requires the ISP's internal records and a lawful request.<\/p>\r\n\t\t\t<\/details>\r\n\r\n\t\t\t<details class=\"ipl-faq-item\">\r\n\t\t\t\t<summary>What does the ASN field actually mean?<\/summary>\r\n\t\t\t\t<p>The ASN is the autonomous system number that announces the address on the global routing table. It identifies the operator, which is the quickest way to separate datacentre and hosting traffic from residential users.<\/p>\r\n\t\t\t<\/details>\r\n\r\n\t\t\t<details class=\"ipl-faq-item\">\r\n\t\t\t\t<summary>Does a VPN change the result?<\/summary>\r\n\t\t\t\t<p>Yes. With a VPN or proxy active, the lookup returns the exit server's address, location, ASN and ISP instead of your own connection details, which makes it a reliable way to verify a VPN is working.<\/p>\r\n\t\t\t<\/details>\r\n\r\n\t\t\t<details class=\"ipl-faq-item\">\r\n\t\t\t\t<summary>Is this free IP lookup tool really free?<\/summary>\r\n\t\t\t\t<p>Yes. Both the bulk public IP address lookup and the what's my IP check are free, require no signup or API key, and results can be exported as JSON or CSV without restriction.<\/p>\r\n\t\t\t<\/details>\r\n\r\n\t\t<\/div>\r\n\r\n\t<\/article>\r\n\r\n\t<div id=\"ipl-toast\" class=\"ipl-toast\" role=\"status\" aria-live=\"polite\"><\/div>\r\n\r\n<\/div>\r\n\r\n<style>\r\n@import url('https:\/\/fonts.googleapis.com\/css2?family=Poppins:wght@300;400;500;600;700;800&family=JetBrains+Mono:wght@400;500;700&display=swap');\r\n\r\n#ipl-root {\r\n\t--ipl-ink:      #0a0a0a;\r\n\t--ipl-white:    #ffffff;\r\n\t--ipl-acc:      #ffc521;\r\n\t--ipl-acc-dim:  #fff4d1;\r\n\t--ipl-border:   #e5e5e5;\r\n\t--ipl-muted:    #71717a;\r\n\t--ipl-light:    #f4f4f5;\r\n\t--ipl-body:     #3f3f46;\r\n\t--ipl-rad:      16px;\r\n\t--ipl-shadow:   0 1px 2px rgba(0,0,0,.03), 0 4px 16px rgba(0,0,0,.06);\r\n\t--ipl-font:     'Poppins', system-ui, -apple-system, sans-serif;\r\n\t--ipl-mono:     'JetBrains Mono', 'SF Mono', 'Consolas', monospace;\r\n}\r\n\r\n.ipl-wrap * { box-sizing: border-box; margin: 0; padding: 0; }\r\n.ipl-wrap {\r\n\tfont-family: var(--ipl-font);\r\n\tmax-width: 980px;\r\n\tmargin: 0 auto;\r\n\tpadding: 40px 20px 64px;\r\n\tcolor: var(--ipl-ink);\r\n\t-webkit-font-smoothing: antialiased;\r\n}\r\n\r\n#ipl-root button,\r\n#ipl-root a,\r\n#ipl-root summary,\r\n#ipl-root textarea {\r\n\t-webkit-tap-highlight-color: transparent;\r\n\ttext-shadow: none;\r\n}\r\n#ipl-root button {\r\n\t-webkit-appearance: none;\r\n\tappearance: none;\r\n\tbackground-image: none;\r\n\ttext-transform: none;\r\n\tletter-spacing: normal;\r\n}\r\n#ipl-root button:focus,\r\n#ipl-root a:focus,\r\n#ipl-root summary:focus,\r\n#ipl-root textarea:focus { outline: none; }\r\n#ipl-root button:focus-visible,\r\n#ipl-root a:focus-visible,\r\n#ipl-root summary:focus-visible {\r\n\toutline: 2px solid var(--ipl-acc);\r\n\toutline-offset: 2px;\r\n}\r\n#ipl-root a,\r\n#ipl-root a:hover,\r\n#ipl-root a:focus,\r\n#ipl-root a:visited { text-decoration: none; }\r\n\r\n.ipl-head { margin-bottom: 28px; text-align: center; }\r\n.ipl-eyebrow {\r\n\tdisplay: inline-flex;\r\n\talign-items: center;\r\n\tgap: 8px;\r\n\tfont-size: .68rem;\r\n\tfont-weight: 600;\r\n\ttext-transform: uppercase;\r\n\tletter-spacing: 1.4px;\r\n\tcolor: var(--ipl-muted);\r\n\tmargin-bottom: 16px;\r\n}\r\n.ipl-eyebrow i {\r\n\twidth: 7px;\r\n\theight: 7px;\r\n\tborder-radius: 50%;\r\n\tbackground: var(--ipl-acc);\r\n\tbox-shadow: 0 0 0 3px rgba(255,197,33,.28);\r\n\tanimation: ipl-pulse 2s ease-in-out infinite;\r\n}\r\n@keyframes ipl-pulse { 50% { box-shadow: 0 0 0 6px rgba(255,197,33,0); } }\r\n.ipl-title {\r\n\tfont-family: var(--ipl-font) !important;\r\n\tfont-size: clamp(1.7rem, 4.6vw, 2.5rem);\r\n\tfont-weight: 800;\r\n\tletter-spacing: -1.2px;\r\n\tline-height: 1.1;\r\n\tcolor: var(--ipl-ink);\r\n\tmargin: 0 0 14px;\r\n}\r\n.ipl-title-mark { color: var(--ipl-acc); }\r\n.ipl-title-sub {\r\n\tdisplay: inline-block;\r\n\tmargin-top: 6px;\r\n\tfont-size: .5em;\r\n\tfont-weight: 600;\r\n\tletter-spacing: -.2px;\r\n\tcolor: var(--ipl-muted);\r\n}\r\n.ipl-intro {\r\n\tfont-size: .9rem;\r\n\tline-height: 1.65;\r\n\tcolor: var(--ipl-body);\r\n\tmax-width: 640px;\r\n\tmargin: 0 auto;\r\n}\r\n.ipl-intro strong { color: var(--ipl-ink); font-weight: 600; }\r\n\r\n.ipl-switch {\r\n\tdisplay: grid;\r\n\tgrid-template-columns: 1fr 1fr;\r\n\tgap: 10px;\r\n\tmargin-bottom: 18px;\r\n}\r\n.ipl-sw {\r\n\tposition: relative;\r\n\tdisplay: flex;\r\n\talign-items: center;\r\n\tgap: 12px;\r\n\tpadding: 16px 18px;\r\n\tborder: 1.5px solid var(--ipl-border);\r\n\tborder-radius: 12px;\r\n\tbackground: var(--ipl-white);\r\n\tcolor: var(--ipl-muted);\r\n\tfont-family: var(--ipl-font);\r\n\tfont-size: .88rem;\r\n\tfont-weight: 600;\r\n\ttext-align: left;\r\n\tcursor: pointer;\r\n\toverflow: hidden;\r\n\ttransition: border-color .2s ease, color .2s ease, background .2s ease, transform .2s ease;\r\n}\r\n.ipl-sw:before {\r\n\tcontent: '';\r\n\tposition: absolute;\r\n\tleft: 0;\r\n\ttop: 0;\r\n\tbottom: 0;\r\n\twidth: 4px;\r\n\tbackground: var(--ipl-acc);\r\n\ttransform: scaleY(0);\r\n\ttransform-origin: bottom;\r\n\ttransition: transform .28s cubic-bezier(.4,0,.2,1);\r\n}\r\n.ipl-sw-idx {\r\n\tfont-family: var(--ipl-mono);\r\n\tfont-size: .7rem;\r\n\tfont-weight: 700;\r\n\tletter-spacing: 0;\r\n\tcolor: #c4c4c8;\r\n\ttransition: color .2s ease;\r\n}\r\n#ipl-root .ipl-sw:hover {\r\n\tborder-color: var(--ipl-acc) !important;\r\n\tbackground: #fffdf6 !important;\r\n\tcolor: var(--ipl-ink) !important;\r\n}\r\n#ipl-root .ipl-sw:hover .ipl-sw-idx { color: #d9a300; }\r\n#ipl-root .ipl-sw.is-active,\r\n#ipl-root .ipl-sw.is-active:hover {\r\n\tbackground: var(--ipl-ink) !important;\r\n\tborder-color: var(--ipl-ink) !important;\r\n\tcolor: var(--ipl-white) !important;\r\n}\r\n.ipl-sw.is-active:before { transform: scaleY(1); transform-origin: top; }\r\n.ipl-sw.is-active .ipl-sw-idx { color: var(--ipl-acc); }\r\n\r\n.ipl-panel { display: none; }\r\n.ipl-panel.is-active { display: block; animation: ipl-up .32s cubic-bezier(.4,0,.2,1) both; }\r\n@keyframes ipl-up { from { opacity: 0; transform: translateY(10px); } to { opacity: 1; transform: none; } }\r\n\r\n.ipl-console {\r\n\tborder: 1.5px solid var(--ipl-border);\r\n\tborder-radius: var(--ipl-rad);\r\n\tbackground: var(--ipl-white);\r\n\tbox-shadow: var(--ipl-shadow);\r\n\toverflow: hidden;\r\n\ttransition: border-color .25s ease;\r\n}\r\n.ipl-console:focus-within { border-color: var(--ipl-ink); }\r\n.ipl-console-bar {\r\n\tdisplay: flex;\r\n\talign-items: center;\r\n\tgap: 10px;\r\n\tpadding: 13px 18px;\r\n\tbackground: var(--ipl-light);\r\n\tborder-bottom: 1px solid var(--ipl-border);\r\n}\r\n.ipl-console-label {\r\n\tfont-size: .68rem;\r\n\tfont-weight: 700;\r\n\ttext-transform: uppercase;\r\n\tletter-spacing: 1.1px;\r\n\tcolor: var(--ipl-ink);\r\n}\r\n.ipl-console-note { font-size: .72rem; color: var(--ipl-muted); }\r\n.ipl-chip {\r\n\tmargin-left: auto;\r\n\tfont-family: var(--ipl-mono);\r\n\tfont-size: .7rem;\r\n\tfont-weight: 500;\r\n\tcolor: var(--ipl-muted);\r\n\tbackground: var(--ipl-white);\r\n\tborder: 1px solid var(--ipl-border);\r\n\tpadding: 3px 10px;\r\n\tborder-radius: 20px;\r\n}\r\n.ipl-chip b { color: var(--ipl-ink); }\r\n.ipl-chip.ipl-over { border-color: #fca5a5; color: #dc2626; background: #fef2f2; }\r\n.ipl-chip.ipl-over b { color: #dc2626; }\r\n#ipl-input {\r\n\tdisplay: block;\r\n\twidth: 100%;\r\n\tpadding: 18px 20px;\r\n\tborder: none;\r\n\toutline: none;\r\n\tbackground: var(--ipl-white);\r\n\tfont-family: var(--ipl-mono);\r\n\tfont-size: .84rem;\r\n\tline-height: 2;\r\n\tcolor: var(--ipl-ink);\r\n\tresize: vertical;\r\n}\r\n#ipl-input::placeholder { color: #c4c4c8; }\r\n.ipl-console-foot {\r\n\tdisplay: flex;\r\n\talign-items: center;\r\n\tgap: 16px;\r\n\tpadding: 14px 18px;\r\n\tborder-top: 1px solid var(--ipl-border);\r\n\tbackground: #fbfbfc;\r\n\tflex-wrap: wrap;\r\n}\r\n.ipl-go {\r\n\tdisplay: inline-flex;\r\n\talign-items: center;\r\n\tgap: 10px;\r\n\tpadding: 13px 24px;\r\n\tborder: none;\r\n\tborder-radius: 10px;\r\n\tbackground: var(--ipl-ink);\r\n\tcolor: var(--ipl-white);\r\n\tfont-family: var(--ipl-font);\r\n\tfont-size: .86rem;\r\n\tfont-weight: 700;\r\n\tcursor: pointer;\r\n\ttransition: background .2s ease, transform .12s ease, box-shadow .2s ease;\r\n\tbox-shadow: 0 2px 10px rgba(10,10,10,.18);\r\n}\r\n.ipl-go svg { width: 16px; height: 16px; transition: transform .22s ease; }\r\n#ipl-root .ipl-go:hover,\r\n#ipl-root .ipl-go:focus {\r\n\tbackground: var(--ipl-acc) !important;\r\n\tcolor: var(--ipl-ink) !important;\r\n\tbox-shadow: 0 5px 18px rgba(255,197,33,.42) !important;\r\n}\r\n.ipl-go:hover svg { transform: translateX(3px); }\r\n.ipl-go:active { transform: scale(.985); }\r\n#ipl-root .ipl-go:disabled,\r\n#ipl-root .ipl-go:disabled:hover {\r\n\tbackground: #d4d4d8 !important;\r\n\tcolor: #71717a !important;\r\n\tbox-shadow: none !important;\r\n\tcursor: not-allowed;\r\n}\r\n.ipl-foot-note { font-size: .74rem; color: var(--ipl-muted); line-height: 1.45; }\r\n\r\n.ipl-alert {\r\n\tmargin-top: 16px;\r\n\tpadding: 14px 18px;\r\n\tbackground: #fef2f2;\r\n\tborder-left: 3px solid #dc2626;\r\n\tborder-radius: 0 10px 10px 0;\r\n\tcolor: #b91c1c;\r\n\tfont-size: .84rem;\r\n\tfont-weight: 500;\r\n\tline-height: 1.55;\r\n}\r\n.ipl-loading {\r\n\tdisplay: flex;\r\n\talign-items: center;\r\n\tjustify-content: center;\r\n\tgap: 12px;\r\n\tpadding: 42px 0;\r\n\tcolor: var(--ipl-muted);\r\n\tfont-size: .86rem;\r\n\tfont-weight: 600;\r\n\tletter-spacing: .2px;\r\n}\r\n.ipl-bars { display: inline-flex; align-items: flex-end; gap: 3px; height: 18px; }\r\n.ipl-bars i {\r\n\twidth: 3px;\r\n\theight: 100%;\r\n\tbackground: var(--ipl-ink);\r\n\tborder-radius: 2px;\r\n\tanimation: ipl-bar .9s ease-in-out infinite;\r\n}\r\n.ipl-bars i:nth-child(2) { animation-delay: .12s; background: var(--ipl-acc); }\r\n.ipl-bars i:nth-child(3) { animation-delay: .24s; }\r\n.ipl-bars i:nth-child(4) { animation-delay: .36s; background: var(--ipl-acc); }\r\n@keyframes ipl-bar { 0%,100% { transform: scaleY(.3); } 50% { transform: scaleY(1); } }\r\n\r\n.ipl-toolbar {\r\n\tdisplay: flex;\r\n\talign-items: center;\r\n\tgap: 12px;\r\n\tmargin: 26px 0 14px;\r\n\tflex-wrap: wrap;\r\n}\r\n.ipl-toolbar-count {\r\n\tfont-size: .72rem;\r\n\tfont-weight: 700;\r\n\ttext-transform: uppercase;\r\n\tletter-spacing: 1.1px;\r\n\tcolor: var(--ipl-muted);\r\n}\r\n.ipl-toolbar-btns { margin-left: auto; display: flex; gap: 8px; flex-wrap: wrap; }\r\n.ipl-tb-btn {\r\n\tpadding: 9px 18px;\r\n\tborder: 1.5px solid var(--ipl-border);\r\n\tborder-radius: 8px;\r\n\tbackground: var(--ipl-white);\r\n\tcolor: var(--ipl-ink);\r\n\tfont-family: var(--ipl-font);\r\n\tfont-size: .76rem;\r\n\tfont-weight: 600;\r\n\tcursor: pointer;\r\n\ttransition: all .2s ease;\r\n}\r\n#ipl-root .ipl-tb-btn:hover,\r\n#ipl-root .ipl-tb-btn:focus {\r\n\tborder-color: var(--ipl-acc) !important;\r\n\tbackground: var(--ipl-acc) !important;\r\n\tcolor: var(--ipl-ink) !important;\r\n}\r\n.ipl-tb-solid { background: var(--ipl-acc); border-color: var(--ipl-acc); color: var(--ipl-ink); }\r\n#ipl-root .ipl-tb-solid:hover,\r\n#ipl-root .ipl-tb-solid:focus {\r\n\tbackground: var(--ipl-ink) !important;\r\n\tborder-color: var(--ipl-ink) !important;\r\n\tcolor: var(--ipl-white) !important;\r\n}\r\n\r\n.ipl-grid { display: grid; grid-template-columns: repeat(2, minmax(0,1fr)); gap: 14px; }\r\n.ipl-rc {\r\n\tposition: relative;\r\n\tbackground: var(--ipl-white);\r\n\tborder: 1.5px solid var(--ipl-border);\r\n\tborder-radius: var(--ipl-rad);\r\n\tpadding: 20px 22px 18px;\r\n\tdisplay: flex;\r\n\tflex-direction: column;\r\n\toverflow: hidden;\r\n\tanimation: ipl-up .35s cubic-bezier(.4,0,.2,1) both;\r\n\ttransition: border-color .22s ease, box-shadow .22s ease, transform .22s ease;\r\n}\r\n.ipl-rc:before {\r\n\tcontent: '';\r\n\tposition: absolute;\r\n\tleft: 0; top: 0; bottom: 0;\r\n\twidth: 4px;\r\n\tbackground: var(--ipl-acc);\r\n\ttransform: scaleY(0);\r\n\ttransform-origin: top;\r\n\ttransition: transform .3s cubic-bezier(.4,0,.2,1);\r\n}\r\n.ipl-rc:hover { border-color: var(--ipl-ink); box-shadow: var(--ipl-shadow); transform: translateY(-2px); }\r\n.ipl-rc:hover:before { transform: scaleY(1); }\r\n.ipl-rc-head {\r\n\tdisplay: flex;\r\n\talign-items: center;\r\n\tgap: 14px;\r\n\tpadding-bottom: 16px;\r\n\tborder-bottom: 1px solid var(--ipl-light);\r\n\tmargin-bottom: 16px;\r\n}\r\n.ipl-rc-flag {\r\n\tfont-size: 2.35rem;\r\n\tline-height: 1;\r\n\tflex-shrink: 0;\r\n\tfilter: drop-shadow(0 2px 6px rgba(0,0,0,.14));\r\n}\r\n.ipl-rc-id { min-width: 0; flex: 1 1 auto; }\r\n.ipl-rc-ip {\r\n\tfont-family: var(--ipl-mono);\r\n\tfont-size: 1.02rem;\r\n\tfont-weight: 700;\r\n\tletter-spacing: -.4px;\r\n\tcolor: var(--ipl-ink);\r\n\tword-break: break-all;\r\n\tline-height: 1.3;\r\n}\r\n.ipl-rc-loc { font-size: .76rem; color: var(--ipl-muted); margin-top: 4px; line-height: 1.4; }\r\n.ipl-ipline { display: flex; align-items: center; gap: 9px; min-width: 0; }\r\n.ipl-ipcopy {\r\n\tflex-shrink: 0;\r\n\twidth: 28px;\r\n\theight: 28px;\r\n\tdisplay: inline-flex;\r\n\talign-items: center;\r\n\tjustify-content: center;\r\n\tborder: 1.5px solid var(--ipl-border);\r\n\tborder-radius: 8px;\r\n\tbackground: var(--ipl-white);\r\n\tcolor: var(--ipl-muted);\r\n\tcursor: pointer;\r\n\ttransition: background .18s ease, color .18s ease, border-color .18s ease, transform .18s ease;\r\n}\r\n.ipl-ipcopy svg { width: 14px; height: 14px; }\r\n#ipl-root .ipl-ipcopy:hover,\r\n#ipl-root .ipl-ipcopy:focus {\r\n\tbackground: var(--ipl-acc) !important;\r\n\tborder-color: var(--ipl-acc) !important;\r\n\tcolor: var(--ipl-ink) !important;\r\n}\r\n.ipl-ipcopy:active { transform: scale(.9); }\r\n.ipl-ipcopy.is-done { background: var(--ipl-acc); border-color: var(--ipl-acc); color: var(--ipl-ink); }\r\n.ipl-ipcopy-dark {\r\n\twidth: 32px;\r\n\theight: 32px;\r\n\tborder-color: rgba(255,255,255,.24);\r\n\tbackground: rgba(255,255,255,.08);\r\n\tcolor: var(--ipl-white);\r\n}\r\n.ipl-ipcopy-dark svg { width: 15px; height: 15px; }\r\n.ipl-tag {\r\n\tflex-shrink: 0;\r\n\talign-self: flex-start;\r\n\tfont-family: var(--ipl-mono);\r\n\tfont-size: .6rem;\r\n\tfont-weight: 700;\r\n\ttext-transform: uppercase;\r\n\tletter-spacing: .8px;\r\n\tpadding: 4px 9px;\r\n\tborder-radius: 5px;\r\n\tbackground: var(--ipl-acc-dim);\r\n\tcolor: #8a6300;\r\n}\r\n.ipl-tag.ipl-bad { background: #fef2f2; color: #dc2626; }\r\n\r\n.ipl-facts { display: grid; gap: 0; margin-bottom: 18px; }\r\n.ipl-fact {\r\n\tdisplay: flex;\r\n\talign-items: baseline;\r\n\tgap: 8px;\r\n\tpadding: 7px 0;\r\n\tborder-bottom: 1px dashed #ececee;\r\n}\r\n.ipl-fact:last-child { border-bottom: none; }\r\n.ipl-fact-k {\r\n\tfont-size: .67rem;\r\n\tfont-weight: 600;\r\n\ttext-transform: uppercase;\r\n\tletter-spacing: .7px;\r\n\tcolor: var(--ipl-muted);\r\n\twhite-space: nowrap;\r\n\tflex-shrink: 0;\r\n}\r\n.ipl-fact-v {\r\n\tflex: 1 1 auto;\r\n\ttext-align: right;\r\n\tfont-family: var(--ipl-mono);\r\n\tfont-size: .78rem;\r\n\tfont-weight: 500;\r\n\tcolor: var(--ipl-ink);\r\n\tword-break: break-word;\r\n\tline-height: 1.45;\r\n}\r\n.ipl-fact-v.ipl-na { color: #b4b4b8; font-weight: 400; }\r\n\r\n.ipl-cta-row { display: flex; gap: 8px; margin-top: auto; flex-wrap: wrap; }\r\n.ipl-cta {\r\n\tflex: 1 1 auto;\r\n\tdisplay: inline-flex;\r\n\talign-items: center;\r\n\tjustify-content: center;\r\n\tpadding: 10px 16px;\r\n\tborder: 1.5px solid var(--ipl-border);\r\n\tborder-radius: 9px;\r\n\tbackground: var(--ipl-white);\r\n\tcolor: var(--ipl-ink);\r\n\tfont-family: var(--ipl-font);\r\n\tfont-size: .76rem;\r\n\tfont-weight: 600;\r\n\ttext-decoration: none !important;\r\n\ttext-align: center;\r\n\twhite-space: nowrap;\r\n\tcursor: pointer;\r\n\ttransition: all .2s ease;\r\n}\r\n#ipl-root .ipl-cta:hover,\r\n#ipl-root .ipl-cta:focus {\r\n\tborder-color: var(--ipl-acc) !important;\r\n\tbackground: var(--ipl-acc) !important;\r\n\tcolor: var(--ipl-ink) !important;\r\n}\r\n.ipl-cta-solid { background: var(--ipl-acc); border-color: var(--ipl-acc); color: var(--ipl-ink); }\r\n#ipl-root .ipl-cta-solid:hover,\r\n#ipl-root .ipl-cta-solid:focus {\r\n\tbackground: var(--ipl-ink) !important;\r\n\tborder-color: var(--ipl-ink) !important;\r\n\tcolor: var(--ipl-white) !important;\r\n}\r\n.ipl-cta.is-off { opacity: .4; pointer-events: none; }\r\n\r\n.ipl-self {\r\n\tborder: 1.5px solid var(--ipl-border);\r\n\tborder-radius: var(--ipl-rad);\r\n\toverflow: hidden;\r\n\tbox-shadow: var(--ipl-shadow);\r\n\tbackground: var(--ipl-white);\r\n}\r\n.ipl-self-top {\r\n\tdisplay: flex;\r\n\talign-items: center;\r\n\tgap: 18px;\r\n\tpadding: 26px 28px;\r\n\tbackground: var(--ipl-ink);\r\n\tcolor: var(--ipl-white);\r\n\tposition: relative;\r\n}\r\n.ipl-self-top:after {\r\n\tcontent: '';\r\n\tposition: absolute;\r\n\tleft: 0; right: 0; bottom: 0;\r\n\theight: 3px;\r\n\tbackground: linear-gradient(90deg, var(--ipl-acc) 0%, var(--ipl-acc) 38%, rgba(255,197,33,0) 100%);\r\n}\r\n.ipl-self-flag {\r\n\tfont-size: 3.4rem;\r\n\tline-height: 1;\r\n\tflex-shrink: 0;\r\n\tfilter: drop-shadow(0 3px 10px rgba(0,0,0,.4));\r\n}\r\n.ipl-self-main { min-width: 0; flex: 1 1 auto; }\r\n.ipl-self-eyebrow {\r\n\tdisplay: block;\r\n\tfont-size: .64rem;\r\n\tfont-weight: 700;\r\n\ttext-transform: uppercase;\r\n\tletter-spacing: 1.4px;\r\n\tcolor: var(--ipl-acc);\r\n\tmargin-bottom: 7px;\r\n}\r\n.ipl-self-ip {\r\n\tfont-family: var(--ipl-mono);\r\n\tfont-size: clamp(1.3rem, 4.4vw, 2.05rem);\r\n\tfont-weight: 700;\r\n\tletter-spacing: -1px;\r\n\tword-break: break-all;\r\n\tline-height: 1.15;\r\n}\r\n#ipl-root .ipl-self-place {\r\n\tmargin-top: 9px;\r\n\tfont-size: .86rem;\r\n\tfont-weight: 500;\r\n\tletter-spacing: .1px;\r\n\tcolor: #f2f2f4 !important;\r\n}\r\n.ipl-refresh {\r\n\tflex-shrink: 0;\r\n\talign-self: flex-start;\r\n\twidth: 38px;\r\n\theight: 38px;\r\n\tdisplay: inline-flex;\r\n\talign-items: center;\r\n\tjustify-content: center;\r\n\tborder: 1px solid rgba(255,255,255,.22);\r\n\tborder-radius: 10px;\r\n\tbackground: rgba(255,255,255,.07);\r\n\tcolor: var(--ipl-white);\r\n\tcursor: pointer;\r\n\ttransition: background .2s ease, color .2s ease, border-color .2s ease;\r\n}\r\n.ipl-refresh svg { width: 17px; height: 17px; }\r\n#ipl-root .ipl-refresh:hover,\r\n#ipl-root .ipl-refresh:focus {\r\n\tbackground: var(--ipl-acc) !important;\r\n\tborder-color: var(--ipl-acc) !important;\r\n\tcolor: var(--ipl-ink) !important;\r\n}\r\n\r\n.ipl-self-body { display: grid; grid-template-columns: 1.05fr .95fr; }\r\n.ipl-map-shell {\r\n\tposition: relative;\r\n\tmin-height: 330px;\r\n\tbackground: var(--ipl-light);\r\n\toverflow: hidden;\r\n}\r\n.ipl-map-frame {\r\n\tposition: absolute;\r\n\tinset: 0;\r\n\twidth: 100%;\r\n\theight: 100%;\r\n\tborder: 0;\r\n\tpointer-events: auto;\r\n\tfilter: grayscale(.35) contrast(1.02);\r\n}\r\n.ipl-pin {\r\n\tposition: absolute;\r\n\tleft: 50%;\r\n\ttop: 50%;\r\n\twidth: 30px;\r\n\theight: 38px;\r\n\tmargin: -38px 0 0 -15px;\r\n\tcursor: pointer;\r\n\toutline: none;\r\n\tanimation: ipl-drop .5s cubic-bezier(.34,1.4,.64,1) both;\r\n}\r\n@keyframes ipl-drop { from { opacity: 0; transform: translateY(-22px); } to { opacity: 1; transform: none; } }\r\n.ipl-pin svg { width: 30px; height: 38px; display: block; filter: drop-shadow(0 4px 8px rgba(0,0,0,.32)); }\r\n.ipl-pin:after {\r\n\tcontent: '';\r\n\tposition: absolute;\r\n\tleft: 50%;\r\n\tbottom: -6px;\r\n\twidth: 22px;\r\n\theight: 7px;\r\n\tmargin-left: -11px;\r\n\tborder-radius: 50%;\r\n\tbackground: rgba(10,10,10,.2);\r\n\tfilter: blur(2px);\r\n}\r\n.ipl-pin-tip {\r\n\tposition: absolute;\r\n\tbottom: calc(100% + 10px);\r\n\tleft: 50%;\r\n\ttransform: translate(-50%, 6px);\r\n\tbackground: var(--ipl-ink);\r\n\tcolor: var(--ipl-white);\r\n\tfont-family: var(--ipl-font);\r\n\tfont-size: .74rem;\r\n\tfont-weight: 600;\r\n\tpadding: 8px 14px;\r\n\tborder-radius: 9px;\r\n\twhite-space: nowrap;\r\n\topacity: 0;\r\n\tpointer-events: none;\r\n\tbox-shadow: 0 10px 26px rgba(0,0,0,.26);\r\n\ttransition: opacity .2s ease, transform .2s ease;\r\n}\r\n.ipl-pin-tip:after {\r\n\tcontent: '';\r\n\tposition: absolute;\r\n\ttop: 100%;\r\n\tleft: 50%;\r\n\tmargin-left: -5px;\r\n\tborder: 5px solid transparent;\r\n\tborder-top-color: var(--ipl-ink);\r\n}\r\n.ipl-pin:hover .ipl-pin-tip,\r\n.ipl-pin:focus .ipl-pin-tip { opacity: 1; transform: translate(-50%, 0); }\r\n.ipl-coords {\r\n\tposition: absolute;\r\n\tleft: 14px;\r\n\tbottom: 14px;\r\n\tfont-family: var(--ipl-mono);\r\n\tfont-size: .68rem;\r\n\tfont-weight: 500;\r\n\tcolor: var(--ipl-ink);\r\n\tbackground: rgba(255,255,255,.94);\r\n\tborder: 1px solid var(--ipl-border);\r\n\tpadding: 5px 11px;\r\n\tborder-radius: 7px;\r\n}\r\n.ipl-map-off {\r\n\tposition: absolute;\r\n\tinset: 0;\r\n\tdisplay: flex;\r\n\talign-items: center;\r\n\tjustify-content: center;\r\n\ttext-align: center;\r\n\tpadding: 24px;\r\n\tfont-size: .82rem;\r\n\tcolor: var(--ipl-muted);\r\n\tbackground: var(--ipl-light);\r\n}\r\n.ipl-self-facts {\r\n\tpadding: 22px 26px;\r\n\tdisplay: grid;\r\n\tgap: 0;\r\n\talign-content: start;\r\n\tborder-left: 1px solid var(--ipl-border);\r\n}\r\n.ipl-self-cta {\r\n\tdisplay: flex;\r\n\tgap: 10px;\r\n\tpadding: 16px 26px;\r\n\tborder-top: 1px solid var(--ipl-border);\r\n\tbackground: #fbfbfc;\r\n\tflex-wrap: wrap;\r\n}\r\n\r\n.ipl-content { margin-top: 56px; }\r\n.ipl-related-top { margin-top: 32px; }\r\n.ipl-answer {\r\n\tposition: relative;\r\n\tbackground: var(--ipl-light);\r\n\tborder-left: 4px solid var(--ipl-acc);\r\n\tborder-radius: 0 var(--ipl-rad) var(--ipl-rad) 0;\r\n\tpadding: 22px 24px;\r\n\tmargin-bottom: 34px;\r\n}\r\n.ipl-answer-tag {\r\n\tdisplay: block;\r\n\tfont-size: .66rem;\r\n\tfont-weight: 700;\r\n\ttext-transform: uppercase;\r\n\tletter-spacing: 1.4px;\r\n\tcolor: #8a6300;\r\n\tmargin-bottom: 9px;\r\n}\r\n.ipl-answer p { font-size: .88rem !important; line-height: 1.8; color: #2f2f35 !important; margin: 0 !important; }\r\n.ipl-content h2 {\r\n\tfont-family: var(--ipl-font) !important;\r\n\tfont-size: 1.3rem;\r\n\tfont-weight: 700;\r\n\tletter-spacing: -.5px;\r\n\tcolor: var(--ipl-ink);\r\n\tmargin: 36px 0 14px;\r\n\tline-height: 1.28;\r\n\tpadding-left: 16px;\r\n\tborder-left: 4px solid var(--ipl-acc);\r\n}\r\n.ipl-content h3 {\r\n\tfont-family: var(--ipl-font) !important;\r\n\tfont-size: 1rem;\r\n\tfont-weight: 700;\r\n\tcolor: var(--ipl-ink);\r\n\tmargin: 24px 0 10px;\r\n}\r\n.ipl-content p { font-size: .89rem; line-height: 1.78; color: var(--ipl-body); margin-bottom: 13px; }\r\n.ipl-content ul { margin: 0 0 16px; padding-left: 0; list-style: none; }\r\n.ipl-content li {\r\n\tposition: relative;\r\n\tfont-size: .87rem;\r\n\tline-height: 1.75;\r\n\tcolor: var(--ipl-body);\r\n\tmargin-bottom: 7px;\r\n\tpadding-left: 22px;\r\n}\r\n.ipl-content li:before {\r\n\tcontent: '';\r\n\tposition: absolute;\r\n\tleft: 2px;\r\n\ttop: .68em;\r\n\twidth: 7px;\r\n\theight: 7px;\r\n\tborder-radius: 2px;\r\n\tbackground: var(--ipl-acc);\r\n}\r\n.ipl-content li strong, .ipl-content p strong { color: var(--ipl-ink); font-weight: 600; }\r\n.ipl-content a {\r\n\tcolor: var(--ipl-ink);\r\n\tfont-weight: 600;\r\n\ttext-decoration: none;\r\n\tbox-shadow: inset 0 -7px 0 var(--ipl-acc-dim);\r\n\ttransition: box-shadow .2s ease;\r\n}\r\n.ipl-content a:hover { box-shadow: inset 0 -18px 0 var(--ipl-acc-dim); }\r\n.ipl-disclaimer {\r\n\tbackground: #fbfbfc;\r\n\tborder: 1px solid var(--ipl-border);\r\n\tborder-radius: 12px;\r\n\tpadding: 18px 20px;\r\n\tfont-size: .84rem !important;\r\n\tcolor: #52525b !important;\r\n\tline-height: 1.75 !important;\r\n}\r\n\r\n.ipl-faq { display: grid; gap: 8px; margin-top: 16px; }\r\n.ipl-faq-item {\r\n\tborder: 1.5px solid var(--ipl-border);\r\n\tborder-radius: 11px;\r\n\tbackground: var(--ipl-white);\r\n\toverflow: hidden;\r\n\ttransition: border-color .2s ease;\r\n}\r\n.ipl-faq-item[open] { border-color: var(--ipl-ink); }\r\n.ipl-faq-item summary {\r\n\tlist-style: none;\r\n\tcursor: pointer;\r\n\tpadding: 15px 48px 15px 18px;\r\n\tfont-size: .87rem;\r\n\tfont-weight: 600;\r\n\tcolor: var(--ipl-ink);\r\n\tposition: relative;\r\n\ttransition: background .2s ease;\r\n}\r\n.ipl-faq-item summary::-webkit-details-marker { display: none; }\r\n.ipl-faq-item summary:after {\r\n\tcontent: '';\r\n\tposition: absolute;\r\n\tright: 18px;\r\n\ttop: 50%;\r\n\twidth: 22px;\r\n\theight: 22px;\r\n\tmargin-top: -11px;\r\n\tborder-radius: 6px;\r\n\tbackground: var(--ipl-light) url(\"data:image\/svg+xml;charset=utf-8,%3Csvg xmlns='http:\/\/www.w3.org\/2000\/svg' viewBox='0 0 24 24' fill='none' stroke='%230a0a0a' stroke-width='3' stroke-linecap='round'%3E%3Cpath d='M6 9l6 6 6-6'\/%3E%3C\/svg%3E\") center \/ 12px no-repeat;\r\n\ttransition: transform .25s ease, background-color .2s ease;\r\n}\r\n.ipl-faq-item[open] summary:after { transform: rotate(180deg); background-color: var(--ipl-acc); }\r\n.ipl-faq-item summary:hover { background: #fbfbfc; }\r\n.ipl-faq-item p { padding: 0 18px 17px; margin: 0; font-size: .85rem; line-height: 1.72; color: #52525b; }\r\n\r\n.ipl-related { display: grid; grid-template-columns: repeat(3, minmax(0,1fr)); gap: 12px; margin-top: 16px; }\r\n.ipl-related-item {\r\n\tdisplay: block;\r\n\tpadding: 18px;\r\n\tborder: 1.5px solid var(--ipl-border);\r\n\tborder-radius: 12px;\r\n\tbackground: var(--ipl-white);\r\n\ttext-decoration: none !important;\r\n\tbox-shadow: none !important;\r\n\ttransition: border-color .2s ease, transform .2s ease, box-shadow .2s ease;\r\n}\r\n#ipl-root .ipl-related-item:hover,\r\n#ipl-root .ipl-related-item:focus {\r\n\tborder-color: var(--ipl-acc) !important;\r\n\tbackground: #fffdf6 !important;\r\n\ttransform: translateY(-3px);\r\n\tbox-shadow: var(--ipl-shadow) !important;\r\n}\r\n#ipl-root .ipl-related-item:hover .ipl-related-name { color: var(--ipl-ink); }\r\n.ipl-related-name { display: block; font-size: .87rem; font-weight: 700; color: var(--ipl-ink); margin-bottom: 5px; }\r\n.ipl-related-desc { display: block; font-size: .77rem; line-height: 1.55; color: var(--ipl-muted); font-weight: 400; }\r\n\r\n.ipl-toast {\r\n\tposition: fixed;\r\n\tbottom: 28px;\r\n\tleft: 50%;\r\n\ttransform: translateX(-50%) translateY(12px);\r\n\tbackground: var(--ipl-ink);\r\n\tcolor: var(--ipl-white);\r\n\tpadding: 11px 24px;\r\n\tborder-radius: 28px;\r\n\tfont-family: var(--ipl-font);\r\n\tfont-size: .84rem;\r\n\tfont-weight: 600;\r\n\tbox-shadow: 0 10px 32px rgba(0,0,0,.24);\r\n\tborder-bottom: 2px solid var(--ipl-acc);\r\n\topacity: 0;\r\n\tpointer-events: none;\r\n\ttransition: opacity .25s ease, transform .25s ease;\r\n\tz-index: 99999;\r\n\twhite-space: nowrap;\r\n}\r\n.ipl-toast.ipl-show { opacity: 1; transform: translateX(-50%) translateY(0); }\r\n\r\n@media (max-width: 880px) {\r\n\t.ipl-grid { grid-template-columns: 1fr; }\r\n\t.ipl-self-body { grid-template-columns: 1fr; }\r\n\t.ipl-self-facts { border-left: none; border-top: 1px solid var(--ipl-border); }\r\n\t.ipl-related { grid-template-columns: 1fr; }\r\n}\r\n@media (max-width: 640px) {\r\n\t.ipl-wrap { padding: 26px 14px 48px; }\r\n\t.ipl-switch { grid-template-columns: 1fr; gap: 8px; }\r\n\t.ipl-sw { padding: 14px 16px; }\r\n\t.ipl-console-foot { flex-direction: column; align-items: stretch; }\r\n\t.ipl-go { width: 100%; justify-content: center; }\r\n\t.ipl-toolbar-btns { margin-left: 0; width: 100%; }\r\n\t.ipl-tb-btn { flex: 1 1 auto; }\r\n\t.ipl-self-top { padding: 22px 18px; gap: 14px; }\r\n\t.ipl-self-flag { font-size: 2.6rem; }\r\n\t.ipl-rc-flag { font-size: 2rem; }\r\n\t.ipl-self-facts { padding: 18px; }\r\n\t.ipl-self-cta { padding: 14px 18px; }\r\n\t.ipl-map-shell { min-height: 260px; }\r\n\t.ipl-content h2 { font-size: 1.14rem; }\r\n}\r\n@media (prefers-reduced-motion: reduce) {\r\n\t.ipl-panel.is-active, .ipl-rc, .ipl-pin { animation: none !important; }\r\n\t.ipl-eyebrow i { animation: none; }\r\n\t.ipl-bars i { animation-duration: 1.6s; }\r\n}\r\n<\/style>\r\n\r\n<script>\r\n(function($) {\r\n\t'use strict';\r\n\r\n\tvar API_URL   = \"https:\\\/\\\/bulkdapa.site\\\/wp-admin\\\/admin-ajax.php\";\r\n\tvar IPL_TOKEN = \"8abb631629\";\r\n\tvar MAX_IPS   = 10;\r\n\r\n\tvar bulkData   = [];\r\n\tvar selfData   = null;\r\n\tvar selfLoaded = false;\r\n\tvar retried    = false;\r\n\r\n\tfunction post(payload, done, fail) {\r\n\t\treturn $.ajax({\r\n\t\t\turl: API_URL,\r\n\t\t\ttype: 'POST',\r\n\t\t\tdata: $.extend({ ipl_token: IPL_TOKEN }, payload),\r\n\t\t\theaders: { 'X-Requested-With': 'XMLHttpRequest' }\r\n\t\t}).done(done).fail(fail);\r\n\t}\r\n\r\n\tfunction refreshToken(cb) {\r\n\t\t$.ajax({\r\n\t\t\turl: API_URL,\r\n\t\t\ttype: 'POST',\r\n\t\t\tdata: { action: 'ipl_refresh_token' },\r\n\t\t\theaders: { 'X-Requested-With': 'XMLHttpRequest' }\r\n\t\t}).always(function(resp) {\r\n\t\t\tif (resp && resp.success && resp.data && resp.data.token) {\r\n\t\t\t\tIPL_TOKEN = resp.data.token;\r\n\t\t\t}\r\n\t\t\tif (typeof cb === 'function') { cb(); }\r\n\t\t});\r\n\t}\r\n\r\n\tfunction escHtml(str) {\r\n\t\treturn $('<div>').text(str == null ? '' : str).html();\r\n\t}\r\n\r\n\tfunction toast(msg) {\r\n\t\tvar $t = $('#ipl-toast').text(msg).addClass('ipl-show');\r\n\t\tclearTimeout($t.data('timer'));\r\n\t\t$t.data('timer', setTimeout(function() { $t.removeClass('ipl-show'); }, 2600));\r\n\t}\r\n\r\n\tfunction copyText(text, label) {\r\n\t\tif (navigator.clipboard && navigator.clipboard.writeText) {\r\n\t\t\tnavigator.clipboard.writeText(text).then(function() { toast(label); }).catch(function() { fallbackCopy(text, label); });\r\n\t\t} else {\r\n\t\t\tfallbackCopy(text, label);\r\n\t\t}\r\n\t}\r\n\r\n\tfunction fallbackCopy(text, label) {\r\n\t\tvar $tmp = $('<textarea>').val(text).css({ position: 'fixed', top: 0, left: 0, opacity: 0 });\r\n\t\t$('body').append($tmp);\r\n\t\t$tmp[0].select();\r\n\t\ttry { document.execCommand('copy'); toast(label); } catch (e) { toast('Copy failed, select the text manually'); }\r\n\t\t$tmp.remove();\r\n\t}\r\n\r\n\tfunction hasCoords(rec) {\r\n\t\treturn rec && typeof rec.latitude === 'number' && typeof rec.longitude === 'number';\r\n\t}\r\n\r\n\tfunction cleanRecord(rec) {\r\n\t\tvar out = {};\r\n\t\t$.each(['ip','country','countryCode','state','city','postal','latitude','longitude','timezone','asn','org','isp','hostname','source'], function(i, k) {\r\n\t\t\tif (rec[k] !== undefined && rec[k] !== null && rec[k] !== '') { out[k] = rec[k]; }\r\n\t\t});\r\n\t\treturn out;\r\n\t}\r\n\r\n\tfunction mapsUrl(rec) {\r\n\t\treturn hasCoords(rec) ? 'https:\/\/www.google.com\/maps\/search\/?api=1&query=' + rec.latitude + ',' + rec.longitude : '';\r\n\t}\r\n\r\n\tfunction placeLine(rec) {\r\n\t\treturn [rec.city, rec.state, rec.country].filter(function(v) { return v; }).join(', ') || 'Location unavailable';\r\n\t}\r\n\r\n\tfunction factRow(key, value) {\r\n\t\tvar empty = (value === null || value === undefined || value === '');\r\n\t\treturn '<div class=\"ipl-fact\"><span class=\"ipl-fact-k\">' + escHtml(key) + '<\/span>' +\r\n\t\t\t'<span class=\"ipl-fact-v' + (empty ? ' ipl-na' : '') + '\">' + escHtml(empty ? 'Not available' : value) + '<\/span><\/div>';\r\n\t}\r\n\r\n\tfunction factBlock(rec) {\r\n\t\tvar coords = hasCoords(rec) ? rec.latitude + ', ' + rec.longitude : '';\r\n\t\treturn factRow('Country', rec.country ? rec.country + (rec.countryCode ? ' (' + rec.countryCode + ')' : '') : '') +\r\n\t\t\tfactRow('Region', rec.state) +\r\n\t\t\tfactRow('City', rec.city) +\r\n\t\t\tfactRow('Postal', rec.postal) +\r\n\t\t\tfactRow('Coordinates', coords) +\r\n\t\t\tfactRow('Timezone', rec.timezone) +\r\n\t\t\tfactRow('ASN', rec.asn ? 'AS' + rec.asn : '') +\r\n\t\t\tfactRow('ISP', rec.isp) +\r\n\t\t\tfactRow('Organisation', rec.org) +\r\n\t\t\tfactRow('Hostname', rec.hostname);\r\n\t}\r\n\r\n\tfunction renderBulk(list) {\r\n\t\tbulkData = list || [];\r\n\t\tvar $grid = $('#ipl-bulk-grid').empty();\r\n\t\tvar ok = 0;\r\n\r\n\t\t$.each(bulkData, function(i, rec) {\r\n\t\t\tif (rec.status !== 'ok') {\r\n\t\t\t\t$grid.append(\r\n\t\t\t\t\t'<div class=\"ipl-rc\">' +\r\n\t\t\t\t\t\t'<div class=\"ipl-rc-head\" style=\"border-bottom:none;margin-bottom:0;padding-bottom:0;\">' +\r\n\t\t\t\t\t\t\t'<span class=\"ipl-rc-flag\">&#9888;&#65039;<\/span>' +\r\n\t\t\t\t\t\t\t'<div class=\"ipl-rc-id\"><div class=\"ipl-rc-ip\">' + escHtml(rec.ip) + '<\/div>' +\r\n\t\t\t\t\t\t\t'<div class=\"ipl-rc-loc\">' + escHtml(rec.message || 'Lookup failed') + '<\/div><\/div>' +\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t'<\/div>' +\r\n\t\t\t\t\t'<\/div>'\r\n\t\t\t\t);\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tok++;\r\n\t\t\tvar gmaps = mapsUrl(rec);\r\n\r\n\t\t\t$grid.append(\r\n\t\t\t\t'<div class=\"ipl-rc\">' +\r\n\t\t\t\t\t'<div class=\"ipl-rc-head\">' +\r\n\t\t\t\t\t\t'<span class=\"ipl-rc-flag\">' + escHtml(rec.flagEmoji || '\\uD83C\\uDF10') + '<\/span>' +\r\n\t\t\t\t\t\t'<div class=\"ipl-rc-id\">' +\r\n\t\t\t\t\t\t\t'<div class=\"ipl-ipline\"><span class=\"ipl-rc-ip\">' + escHtml(rec.ip) + '<\/span>' +\r\n\t\t\t\t\t\t\t'<button type=\"button\" class=\"ipl-ipcopy\" data-ip=\"' + escHtml(rec.ip) + '\" aria-label=\"Copy IP address\" title=\"Copy IP address\">' +\r\n\t\t\t\t\t\t\t'<svg viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><rect x=\"9\" y=\"9\" width=\"12\" height=\"12\" rx=\"2.5\"\/><path d=\"M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1\"\/><\/svg><\/button><\/div>' +\r\n\t\t\t\t\t\t\t'<div class=\"ipl-rc-loc\">' + escHtml(placeLine(rec)) + '<\/div>' +\r\n\t\t\t\t\t\t'<\/div>' +\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t'<\/div>' +\r\n\t\t\t\t\t'<div class=\"ipl-facts\">' + factBlock(rec) + '<\/div>' +\r\n\t\t\t\t\t'<div class=\"ipl-cta-row\">' +\r\n\t\t\t\t\t\t'<button type=\"button\" class=\"ipl-cta ipl-copy-one\" data-idx=\"' + i + '\">Copy JSON<\/button>' +\r\n\t\t\t\t\t\t'<a class=\"ipl-cta ipl-cta-solid' + (gmaps ? '' : ' is-off') + '\" href=\"' + (gmaps || '#') + '\" target=\"_blank\" rel=\"noopener nofollow\">View on Google Maps<\/a>' +\r\n\t\t\t\t\t'<\/div>' +\r\n\t\t\t\t'<\/div>'\r\n\t\t\t);\r\n\t\t});\r\n\r\n\t\t$('#ipl-result-count').text(ok + ' of ' + bulkData.length + ' resolved');\r\n\t\t$('#ipl-bulk-results').show();\r\n\t}\r\n\r\n\tfunction csvEscape(value) {\r\n\t\tvar s = (value === null || value === undefined) ? '' : String(value);\r\n\t\ts = s.replace(\/\"\/g, '\"\"');\r\n\t\treturn \/[\",\\r\\n]\/.test(s) ? '\"' + s + '\"' : s;\r\n\t}\r\n\r\n\t$('#ipl-input').on('input', function() {\r\n\t\tvar count = $(this).val().split(\/\\n\/).filter(function(l) { return l.trim() !== ''; }).length;\r\n\t\t$('#ipl-count').text(count);\r\n\t\t$('#ipl-count-chip').toggleClass('ipl-over', count > MAX_IPS);\r\n\t});\r\n\r\n\t$('.ipl-sw').on('click', function() {\r\n\t\tvar panel = $(this).data('panel');\r\n\r\n\t\t$('.ipl-sw').removeClass('is-active').attr('aria-selected', 'false');\r\n\t\t$(this).addClass('is-active').attr('aria-selected', 'true');\r\n\r\n\t\t$('.ipl-panel').removeClass('is-active').attr('hidden', true);\r\n\t\t$('#ipl-panel-' + panel).addClass('is-active').removeAttr('hidden');\r\n\r\n\t\tif (panel === 'self' && !selfLoaded) {\r\n\t\t\tselfLoaded = true;\r\n\t\t\tloadSelf();\r\n\t\t}\r\n\t});\r\n\r\n\tfunction runBulk() {\r\n\t\tvar raw = $('#ipl-input').val().trim();\r\n\t\t$('#ipl-bulk-error').hide();\r\n\t\t$('#ipl-bulk-results').hide();\r\n\r\n\t\tif (!raw) {\r\n\t\t\t$('#ipl-bulk-error').text('Add at least one IP address to look up.').show();\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tvar lines = raw.split(\/\\n\/).filter(function(l) { return l.trim() !== ''; });\r\n\t\tif (lines.length > MAX_IPS) {\r\n\t\t\t$('#ipl-bulk-error').text('Remove ' + (lines.length - MAX_IPS) + ' line(s). The limit is ' + MAX_IPS + ' addresses per run.').show();\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tvar $btn = $('#ipl-run-bulk').prop('disabled', true);\r\n\t\t$('#ipl-bulk-loader').show();\r\n\r\n\t\tpost({ action: 'ipl_bulk_lookup', ips: raw }, function(resp) {\r\n\t\t\tif (!resp || !resp.success) {\r\n\t\t\t\tvar msg = (resp && resp.data && resp.data.message) ? resp.data.message : 'Lookup failed. Try again.';\r\n\t\t\t\tif (!retried && \/expired|origin|tool page\/i.test(msg)) {\r\n\t\t\t\t\tretried = true;\r\n\t\t\t\t\trefreshToken(function() { runBulk(); });\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\t$('#ipl-bulk-error').text(msg).show();\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tretried = false;\r\n\t\t\trenderBulk(resp.data.results || []);\r\n\t\t}, function(xhr) {\r\n\t\t\tif (xhr.status === 403 && !retried) {\r\n\t\t\t\tretried = true;\r\n\t\t\t\trefreshToken(function() { runBulk(); });\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\t$('#ipl-bulk-error').text('Network error. Check your connection and try again.').show();\r\n\t\t}).always(function() {\r\n\t\t\t$btn.prop('disabled', false);\r\n\t\t\t$('#ipl-bulk-loader').hide();\r\n\t\t});\r\n\t}\r\n\r\n\t$('#ipl-run-bulk').on('click', function() {\r\n\t\tretried = false;\r\n\t\trunBulk();\r\n\t});\r\n\r\n\t$('#ipl-bulk-grid').on('click', '.ipl-copy-one', function() {\r\n\t\tvar rec = bulkData[$(this).data('idx')];\r\n\t\tif (!rec) { return; }\r\n\t\tcopyText(JSON.stringify(cleanRecord(rec), null, 2), 'JSON copied');\r\n\t});\r\n\r\n\t$('#ipl-copy-all').on('click', function() {\r\n\t\tif (!bulkData.length) { return; }\r\n\t\tcopyText(JSON.stringify(bulkData.filter(function(r) { return r.status === 'ok'; }).map(cleanRecord), null, 2), 'All JSON copied');\r\n\t});\r\n\r\n\t$('#ipl-download-csv').on('click', function() {\r\n\t\tif (!bulkData.length) { return; }\r\n\t\tvar cols = ['ip','country','countryCode','state','city','postal','latitude','longitude','timezone','asn','org','isp','hostname'];\r\n\t\tvar rows = [cols.join(',')];\r\n\r\n\t\t$.each(bulkData, function(i, rec) {\r\n\t\t\tif (rec.status !== 'ok') { return; }\r\n\t\t\trows.push(cols.map(function(c) { return csvEscape(rec[c]); }).join(','));\r\n\t\t});\r\n\r\n\t\tvar blob = new Blob(['\\uFEFF' + rows.join('\\r\\n')], { type: 'text\/csv;charset=utf-8;' });\r\n\t\tvar url  = URL.createObjectURL(blob);\r\n\t\tvar a    = document.createElement('a');\r\n\t\ta.href = url;\r\n\t\ta.download = 'ip-lookup-' + new Date().toISOString().slice(0, 10) + '.csv';\r\n\t\tdocument.body.appendChild(a);\r\n\t\ta.click();\r\n\t\tsetTimeout(function() { document.body.removeChild(a); URL.revokeObjectURL(url); }, 120);\r\n\t\ttoast('CSV downloaded');\r\n\t});\r\n\r\n\tfunction drawMap(rec) {\r\n\t\tif (!hasCoords(rec)) {\r\n\t\t\t$('#ipl-map-frame, #ipl-map-pin, #ipl-map-coords').hide();\r\n\t\t\t$('#ipl-map-off').show();\r\n\t\t\treturn;\r\n\t\t}\r\n\r\n\t\tvar d    = 0.22;\r\n\t\tvar lat  = rec.latitude;\r\n\t\tvar lng  = rec.longitude;\r\n\t\tvar bbox = [ (lng - d).toFixed(5), (lat - d).toFixed(5), (lng + d).toFixed(5), (lat + d).toFixed(5) ].join('%2C');\r\n\r\n\t\t$('#ipl-map-off').hide();\r\n\t\t$('#ipl-map-frame').attr('src', 'https:\/\/www.openstreetmap.org\/export\/embed.html?bbox=' + bbox + '&layer=mapnik').show();\r\n\t\t$('#ipl-map-coords').text(lat.toFixed(4) + ', ' + lng.toFixed(4)).show();\r\n\t\t$('#ipl-pin-tip').text((rec.flagEmoji ? rec.flagEmoji + '  ' : '') + rec.ip + (rec.country ? '  \u00b7  ' + rec.country : ''));\r\n\t\t$('#ipl-map-pin').show();\r\n\t}\r\n\r\n\tfunction renderSelf(rec) {\r\n\t\tselfData = rec;\r\n\r\n\t\t$('#ipl-self-flag').text(rec.flagEmoji || '\\uD83C\\uDF10');\r\n\t\t$('#ipl-self-ip').text(rec.ip);\r\n\t\t$('#ipl-self-place').text(placeLine(rec));\r\n\t\t$('#ipl-self-facts').html(factBlock(rec));\r\n\r\n\t\tvar gmaps = mapsUrl(rec);\r\n\t\t$('#ipl-self-maps').attr('href', gmaps || '#').toggleClass('is-off', !gmaps);\r\n\r\n\t\t$('#ipl-self-wrap').show();\r\n\t\tdrawMap(rec);\r\n\t}\r\n\r\n\tfunction loadSelf() {\r\n\t\t$('#ipl-self-error').hide();\r\n\t\t$('#ipl-self-wrap').hide();\r\n\t\t$('#ipl-self-loader').show();\r\n\r\n\t\tpost({ action: 'ipl_self_lookup' }, function(resp) {\r\n\t\t\t$('#ipl-self-loader').hide();\r\n\t\t\tif (!resp || !resp.success) {\r\n\t\t\t\tvar msg = (resp && resp.data && resp.data.message) ? resp.data.message : 'Your IP address could not be resolved.';\r\n\t\t\t\tif (!retried && \/expired|origin|tool page\/i.test(msg)) {\r\n\t\t\t\t\tretried = true;\r\n\t\t\t\t\trefreshToken(function() { loadSelf(); });\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\t$('#ipl-self-error').text(msg).show();\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tretried = false;\r\n\t\t\trenderSelf(resp.data.result);\r\n\t\t}, function(xhr) {\r\n\t\t\t$('#ipl-self-loader').hide();\r\n\t\t\tif (xhr.status === 403 && !retried) {\r\n\t\t\t\tretried = true;\r\n\t\t\t\trefreshToken(function() { loadSelf(); });\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\t$('#ipl-self-error').text('Network error. Refresh the page and try again.').show();\r\n\t\t});\r\n\t}\r\n\r\n\tfunction flashCopy($btn) {\r\n\t\t$btn.addClass('is-done');\r\n\t\tsetTimeout(function() { $btn.removeClass('is-done'); }, 1100);\r\n\t}\r\n\r\n\t$('#ipl-root').on('click', '.ipl-ipcopy', function() {\r\n\t\tvar $btn = $(this);\r\n\t\tvar ip   = $btn.data('ip') || (selfData ? selfData.ip : '');\r\n\t\tif (!ip) { return; }\r\n\t\tcopyText(String(ip), 'IP address copied');\r\n\t\tflashCopy($btn);\r\n\t});\r\n\r\n\t$('#ipl-self-copy').on('click', function() {\r\n\t\tif (selfData) { copyText(JSON.stringify(cleanRecord(selfData), null, 2), 'JSON copied'); }\r\n\t});\r\n\r\n\t$('#ipl-self-refresh').on('click', function() {\r\n\t\tretried = false;\r\n\t\tloadSelf();\r\n\t});\r\n\r\n\t$('#ipl-self-maps').on('click', function(e) {\r\n\t\tif ($(this).hasClass('is-off')) { e.preventDefault(); }\r\n\t});\r\n\r\n\t$(function() { refreshToken(); });\r\n\r\n})(jQuery);\r\n<\/script>\r\n\r\n\t<\/div>\n\t\t\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<\/div>","protected":false},"excerpt":{"rendered":"","protected":false},"author":2,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_acf_changed":false,"site-sidebar-layout":"no-sidebar","site-content-layout":"","ast-site-content-layout":"full-width-container","site-content-style":"default","site-sidebar-style":"default","ast-global-header-display":"","ast-banner-title-visibility":"","ast-main-header-display":"","ast-hfb-above-header-display":"","ast-hfb-below-header-display":"","ast-hfb-mobile-header-display":"","site-post-title":"disabled","ast-breadcrumbs-content":"","ast-featured-img":"disabled","footer-sml-layout":"","ast-disable-related-posts":"","theme-transparent-header-meta":"default","adv-header-id-meta":"","stick-header-meta":"","header-above-stick-meta":"","header-main-stick-meta":"","header-below-stick-meta":"","astra-migrate-meta-layouts":"set","ast-page-background-enabled":"default","ast-page-background-meta":{"desktop":{"background-color":"var(--ast-global-color-5)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"ast-content-background-meta":{"desktop":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"tablet":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""},"mobile":{"background-color":"var(--ast-global-color-4)","background-image":"","background-repeat":"repeat","background-position":"center center","background-size":"auto","background-attachment":"scroll","background-type":"","background-media":"","overlay-type":"","overlay-color":"","overlay-opacity":"","overlay-gradient":""}},"footnotes":""},"class_list":["post-2746","page","type-page","status-publish","hentry"],"acf":[],"_links":{"self":[{"href":"https:\/\/bulkdapa.site\/hi\/wp-json\/wp\/v2\/pages\/2746","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/bulkdapa.site\/hi\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/bulkdapa.site\/hi\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/bulkdapa.site\/hi\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/bulkdapa.site\/hi\/wp-json\/wp\/v2\/comments?post=2746"}],"version-history":[{"count":14,"href":"https:\/\/bulkdapa.site\/hi\/wp-json\/wp\/v2\/pages\/2746\/revisions"}],"predecessor-version":[{"id":2764,"href":"https:\/\/bulkdapa.site\/hi\/wp-json\/wp\/v2\/pages\/2746\/revisions\/2764"}],"wp:attachment":[{"href":"https:\/\/bulkdapa.site\/hi\/wp-json\/wp\/v2\/media?parent=2746"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}