mirror of
https://github.com/NetworkCats/rustyip.git
synced 2026-11-13 16:17:46 +00:00
Switch from High Frequency 2vCPU/2GB ($18/mo) to Regular Performance 1vCPU/1GB ($5/mo). Tighten HAProxy rate limits from 100/50/30 RPM to 60/30/15 RPM with lower global RPS thresholds (200/300 instead of 300/500). Reduce maxconn, socket buffers, file descriptor limits, and Docker resource settings to fit within 1GB RAM constraints. Update all user-facing content and translations across 14 locales.
293 lines
16 KiB
HTML
293 lines
16 KiB
HTML
{% extends "base.html" %}
|
|
|
|
{% block title %}{{ "Accurate IP proxy information and geographic location"|t(locale) }} - {{ site_domain }}{% endblock %}
|
|
|
|
{% block head_meta %}
|
|
{% if is_query %}
|
|
<meta name="robots" content="noindex, nofollow">
|
|
{% else %}
|
|
<meta name="description" content="{{ "Find your public IP address instantly. Look up geolocation, ASN, organization, and proxy/VPN/Tor detection for any IP address."|t(locale) }}">
|
|
<link rel="canonical" href="https://{{ site_domain }}/{{ lang_tag }}">
|
|
<meta property="og:title" content="{{ "Accurate IP proxy information and geographic location"|t(locale) }} - {{ site_domain }}">
|
|
<meta property="og:description" content="{{ "Find your public IP address instantly. Look up geolocation, ASN, organization, and proxy/VPN/Tor detection for any IP address."|t(locale) }}">
|
|
<meta property="og:type" content="website">
|
|
<meta property="og:url" content="https://{{ site_domain }}/{{ lang_tag }}">
|
|
<meta property="og:image" content="https://{{ site_domain }}/static/icons/android-chrome-512x512.png">
|
|
<meta property="og:image:width" content="512">
|
|
<meta property="og:image:height" content="512">
|
|
<meta name="twitter:card" content="summary">
|
|
<meta name="twitter:title" content="{{ "Accurate IP proxy information and geographic location"|t(locale) }} - {{ site_domain }}">
|
|
<meta name="twitter:description" content="{{ "Find your public IP address instantly. Look up geolocation, ASN, organization, and proxy/VPN/Tor detection for any IP address."|t(locale) }}">
|
|
<meta name="twitter:image" content="https://{{ site_domain }}/static/icons/android-chrome-512x512.png">
|
|
{% for l in all_locales %}
|
|
<link rel="alternate" hreflang="{{ l.tag() }}" href="https://{{ site_domain }}/{{ l.tag() }}">
|
|
{% endfor %}
|
|
<link rel="alternate" hreflang="x-default" href="https://{{ site_domain }}/">
|
|
{% endif %}
|
|
<meta name="theme-color" content="#007AFF" media="(prefers-color-scheme: light)">
|
|
<meta name="theme-color" content="#0A84FF" media="(prefers-color-scheme: dark)">
|
|
{% endblock %}
|
|
|
|
{% block head_extra %}
|
|
{% if !is_query %}
|
|
<script type="application/ld+json">
|
|
{
|
|
"@context": "https://schema.org",
|
|
"@type": "WebApplication",
|
|
"name": "{{ site_domain }}",
|
|
"url": "https://{{ site_domain }}/",
|
|
"description": "{{ "Find your public IP address instantly. Look up geolocation, ASN, organization, and proxy/VPN/Tor detection for any IP address."|t(locale) }}",
|
|
"applicationCategory": "UtilitiesApplication",
|
|
"operatingSystem": "All",
|
|
"offers": {
|
|
"@type": "Offer",
|
|
"price": "0",
|
|
"priceCurrency": "USD"
|
|
},
|
|
"inLanguage": "{{ lang_tag }}",
|
|
"availableLanguage": [{% for l in all_locales %}{% if !loop.first %}, {% endif %}"{{ l.tag() }}"{% endfor %}],
|
|
"image": "https://{{ site_domain }}/static/icons/android-chrome-512x512.png"
|
|
}
|
|
</script>
|
|
{% endif %}
|
|
{% endblock %}
|
|
|
|
{% block head_stylesheets %}
|
|
<link rel="stylesheet" href="/static/simple-line-icons.css?v={{ css_version }}">
|
|
{% endblock %}
|
|
|
|
{% block content %}
|
|
{% let autofocus = false %}
|
|
{% include "_search_form.html" %}
|
|
|
|
<div itemscope itemtype="https://schema.org/WebPage"
|
|
data-ipv4-domain="{{ ipv4_domain }}"
|
|
data-copied-text="{{ "Copied"|t(locale) }}"
|
|
data-yes-text="{{ "Yes"|t(locale) }}"
|
|
data-no-text="{{ "No"|t(locale) }}"
|
|
data-table-label="{{ "IP address information"|t(locale) }}"
|
|
{% if is_query %}data-is-query="true"{% endif %}
|
|
id="ip-info-root">
|
|
<div class="ip-copy-wrap" data-copied="{{ "Copied"|t(locale) }}" data-copy-label="{{ "Copy IP address to clipboard"|t(locale) }}">
|
|
<h1 class="ip-display" itemprop="name">{{ ip }}</h1>
|
|
<span class="ip-copied-tooltip" aria-live="polite" hidden>{{ "Copied"|t(locale) }}</span>
|
|
</div>
|
|
|
|
<table class="info-table" aria-label="{{ "IP address information"|t(locale) }}"
|
|
data-l-asn="{{ "ASN"|t(locale) }}" data-l-org="{{ "Org"|t(locale) }}" data-l-country="{{ "Country"|t(locale) }}" data-l-city="{{ "City"|t(locale) }}">
|
|
<tbody>
|
|
{% if !asn.is_empty() %}
|
|
<tr data-label="asn">
|
|
<th scope="row">{{ "ASN"|t(locale) }}</th>
|
|
<td>{% if let Some(n) = asn_number %}<a href="https://bgp.tools/as/{{ n }}" target="_blank" rel="noopener noreferrer">{{ asn }}<span class="sr-only"> ({{ "opens in a new tab"|t(locale) }})</span></a>{% else %}{{ asn }}{% endif %}</td>
|
|
</tr>
|
|
{% endif %}
|
|
{% if !org.is_empty() %}
|
|
<tr data-label="org">
|
|
<th scope="row">{{ "Org"|t(locale) }}</th>
|
|
<td itemprop="publisher" itemscope itemtype="https://schema.org/Organization"><span itemprop="name">{{ org }}</span></td>
|
|
</tr>
|
|
{% endif %}
|
|
{% if !country.is_empty() %}
|
|
<tr data-label="country" itemprop="contentLocation" itemscope itemtype="https://schema.org/Place">
|
|
<th scope="row">{{ "Country"|t(locale) }}</th>
|
|
<td itemprop="address" itemscope itemtype="https://schema.org/PostalAddress"><span itemprop="addressCountry">{{ country }}</span>{% if !country_code.is_empty() %}<meta itemprop="addressCountry" content="{{ country_code }}">{% endif %}</td>
|
|
</tr>
|
|
{% endif %}
|
|
{% if !city.is_empty() %}
|
|
<tr data-label="city">
|
|
<th scope="row">{{ "City"|t(locale) }}</th>
|
|
<td itemprop="contentLocation" itemscope itemtype="https://schema.org/Place"><span itemprop="name">{{ city }}</span></td>
|
|
</tr>
|
|
{% endif %}
|
|
<tr data-label="proxy">
|
|
<th scope="row">{{ "Proxy"|t(locale) }}</th>
|
|
<td>{% if is_proxy %}<i class="icon-check bool-true" aria-hidden="true"></i><span class="sr-only">{{ "Yes"|t(locale) }}</span>{% else %}<i class="icon-minus bool-false" aria-hidden="true"></i><span class="sr-only">{{ "No"|t(locale) }}</span>{% endif %}</td>
|
|
</tr>
|
|
<tr data-label="vpn">
|
|
<th scope="row">{{ "VPN"|t(locale) }}</th>
|
|
<td>{% if is_vpn %}<i class="icon-check bool-true" aria-hidden="true"></i><span class="sr-only">{{ "Yes"|t(locale) }}</span>{% else %}<i class="icon-minus bool-false" aria-hidden="true"></i><span class="sr-only">{{ "No"|t(locale) }}</span>{% endif %}</td>
|
|
</tr>
|
|
<tr data-label="hosting">
|
|
<th scope="row">{{ "Hosting"|t(locale) }}</th>
|
|
<td>{% if is_hosting %}<i class="icon-check bool-true" aria-hidden="true"></i><span class="sr-only">{{ "Yes"|t(locale) }}</span>{% else %}<i class="icon-minus bool-false" aria-hidden="true"></i><span class="sr-only">{{ "No"|t(locale) }}</span>{% endif %}</td>
|
|
</tr>
|
|
<tr data-label="tor">
|
|
<th scope="row">{{ "Tor"|t(locale) }}</th>
|
|
<td>{% if is_tor %}<i class="icon-check bool-true" aria-hidden="true"></i><span class="sr-only">{{ "Yes"|t(locale) }}</span>{% else %}<i class="icon-minus bool-false" aria-hidden="true"></i><span class="sr-only">{{ "No"|t(locale) }}</span>{% endif %}</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
|
|
<div id="alt-ip-section" hidden></div>
|
|
|
|
</div>
|
|
|
|
<section class="faq" aria-label="{{ "Frequently Asked Questions"|t(locale) }}" itemscope itemtype="https://schema.org/FAQPage">
|
|
<h2 class="faq-title">{{ "FAQ"|t(locale) }}</h2>
|
|
|
|
<details open itemscope itemprop="mainEntity" itemtype="https://schema.org/Question">
|
|
<summary itemprop="name">{{ "How to use this service from the command line"|t(locale) }}</summary>
|
|
<div class="faq-content" itemscope itemprop="acceptedAnswer" itemtype="https://schema.org/Answer">
|
|
<div itemprop="text">
|
|
<p>{{ "You can use curl, httpie, wget, or whatever command line tool you prefer. Here's an example with curl:"|t(locale) }}</p>
|
|
<p>{{ "Check your current IP:"|t(locale) }}</p>
|
|
<pre><code>curl {{ site_domain }}</code></pre>
|
|
<p>{{ "Look up information about your own IP:"|t(locale) }}</p>
|
|
<pre><code>curl {{ site_domain }}/asn
|
|
|
|
curl {{ site_domain }}/org
|
|
|
|
curl {{ site_domain }}/country
|
|
|
|
curl {{ site_domain }}/city
|
|
|
|
curl {{ site_domain }}/proxy
|
|
|
|
curl {{ site_domain }}/vpn
|
|
|
|
curl {{ site_domain }}/hosting
|
|
|
|
curl {{ site_domain }}/tor</code></pre>
|
|
<p>{{ "Or get everything in JSON format:"|t(locale) }}</p>
|
|
<pre><code>curl {{ site_domain }}/json
|
|
{
|
|
"ip": "1.1.1.1",
|
|
"continent": { ... },
|
|
"country": { ... },
|
|
"city": { ... },
|
|
"location": { ... },
|
|
"asn": { ... },
|
|
"proxy": { ... }
|
|
}</code></pre>
|
|
<p>{{ "Look up information about a specific IP:"|t(locale) }}</p>
|
|
<pre><code>curl {{ site_domain }}/json?ip=1.1.1.1
|
|
{
|
|
"ip": "1.1.1.1",
|
|
"continent": { ... },
|
|
"country": { ... },
|
|
"city": { ... },
|
|
"location": { ... },
|
|
"asn": { ... },
|
|
"proxy": { ... }
|
|
}</code></pre>
|
|
</div>
|
|
</div>
|
|
</details>
|
|
|
|
<details open itemscope itemprop="mainEntity" itemtype="https://schema.org/Question">
|
|
<summary itemprop="name">{{ "How do I force IPv4 or IPv6?"|t(locale) }}</summary>
|
|
<div class="faq-content" itemscope itemprop="acceptedAnswer" itemtype="https://schema.org/Answer">
|
|
<div itemprop="text">
|
|
<p>{{ "Use <code>curl -4</code> or <code>curl -6</code> to specifically check your IPv4 or IPv6 address."|t(locale)|safe }}</p>
|
|
</div>
|
|
</div>
|
|
</details>
|
|
|
|
<details open itemscope itemprop="mainEntity" itemtype="https://schema.org/Question">
|
|
<summary itemprop="name">{{ "How do I get a JSON response?"|t(locale) }}</summary>
|
|
<div class="faq-content" itemscope itemprop="acceptedAnswer" itemtype="https://schema.org/Answer">
|
|
<div itemprop="text">
|
|
<p>{{ "Send a request to the <code>/json</code> endpoint, or send a request with the <code>application/json</code> header."|t(locale)|safe }}</p>
|
|
</div>
|
|
</div>
|
|
</details>
|
|
|
|
<details open itemscope itemprop="mainEntity" itemtype="https://schema.org/Question">
|
|
<summary itemprop="name">{{ "Can I call your service programmatically?"|t(locale) }}</summary>
|
|
<div class="faq-content" itemscope itemprop="acceptedAnswer" itemtype="https://schema.org/Answer">
|
|
<div itemprop="text">
|
|
<p>{{ "Sure, but please respect our rate limits. Normally it's 60 RPM, and under heavy load we may drop it to 30 or 15 RPM."|t(locale) }}</p>
|
|
<p>{{ "The API is meant for manual use or small projects. If your site uses our API to look up visitor IPs, please use a message queue so requests don't block. If your project has high traffic or needs low latency, you're better off using our open source offline database: <a href=\"https://github.com/NetworkCats/Merged-IP-Data\">Merged IP Database</a>. That's actually what this project uses under the hood."|t(locale)|safe }}</p>
|
|
</div>
|
|
</div>
|
|
</details>
|
|
|
|
<details open itemscope itemprop="mainEntity" itemtype="https://schema.org/Question">
|
|
<summary itemprop="name">{{ "Where does the IP data come from?"|t(locale) }}</summary>
|
|
<div class="faq-content" itemscope itemprop="acceptedAnswer" itemtype="https://schema.org/Answer">
|
|
<div itemprop="text">
|
|
<p>{{ "Geolocation data mainly comes from the free databases by Maxmind and DB-IP. AS data comes from IPinfo's free database. Proxy data comes from my own <a href=\"https://github.com/NetworkCats/OpenProxyDB\">OpenProxyDB</a>."|t(locale)|safe }}</p>
|
|
<p>{{ "Data attributions:"|t(locale) }}</p>
|
|
<ul>
|
|
<li>MaxMind GeoLite2: <a href="https://creativecommons.org/licenses/by-sa/4.0/">Creative Commons Attribution-ShareAlike 4.0 International License</a></li>
|
|
<li>IPinfo Lite: <a href="https://creativecommons.org/licenses/by-sa/4.0/">Creative Commons Attribution-ShareAlike 4.0 International License</a></li>
|
|
<li>DB-IP: <a href="https://creativecommons.org/licenses/by/4.0/">CC BY 4.0</a></li>
|
|
<li>RouteViews ASN: <a href="https://creativecommons.org/publicdomain/zero/1.0/">CC0 1.0</a></li>
|
|
<li>OpenProxyDB: <a href="https://creativecommons.org/publicdomain/zero/1.0/">CC0 1.0</a></li>
|
|
</ul>
|
|
</div>
|
|
</div>
|
|
</details>
|
|
|
|
<details open itemscope itemprop="mainEntity" itemtype="https://schema.org/Question">
|
|
<summary itemprop="name">{{ "Can I run my own instance?"|t(locale) }}</summary>
|
|
<div class="faq-content" itemscope itemprop="acceptedAnswer" itemtype="https://schema.org/Answer">
|
|
<div itemprop="text">
|
|
<p>{{ "Yes, the source code and database are both open source and on GitHub:"|t(locale) }}</p>
|
|
<ul>
|
|
<li><a href="https://github.com/NetworkCats/rustyip">https://github.com/NetworkCats/rustyip</a></li>
|
|
<li><a href="https://github.com/NetworkCats/Merged-IP-Data">https://github.com/NetworkCats/Merged-IP-Data</a></li>
|
|
</ul>
|
|
</div>
|
|
</div>
|
|
</details>
|
|
|
|
<details open itemscope itemprop="mainEntity" itemtype="https://schema.org/Question">
|
|
<summary itemprop="name">{{ "How is this website different from other IP lookup sites?"|t(locale) }}</summary>
|
|
<div class="faq-content" itemscope itemprop="acceptedAnswer" itemtype="https://schema.org/Answer">
|
|
<div itemprop="text">
|
|
<p>{{ "The biggest thing is proxy detection. Our database covers proxy related data and the accuracy is really good. We've tested it privately against commercial databases like IPinfo's, and we hold up just as well, and actually do better on residential proxy detection."|t(locale) }}</p>
|
|
<p>{{ "We also have better IPv6 geolocation coverage since we merge multiple databases together, so the data ends up being more complete."|t(locale) }}</p>
|
|
<p>{{ "The UX is also better than most IP lookup sites out there. The site runs without any JavaScript, and we only pull in a minimal amount of external resources (fonts and icons), so it loads fast on the first visit."|t(locale) }}</p>
|
|
</div>
|
|
</div>
|
|
</details>
|
|
|
|
<details open itemscope itemprop="mainEntity" itemtype="https://schema.org/Question">
|
|
<summary itemprop="name">{{ "Is this service reliable?"|t(locale) }}</summary>
|
|
<div class="faq-content" itemscope itemprop="acceptedAnswer" itemtype="https://schema.org/Answer">
|
|
<div itemprop="text">
|
|
<p>{{ "The whole thing is written in Rust, so performance is great. It can handle L7 DDoS traffic and stay up fine. It runs on a 1 core 1 GB VPS, which is already more than enough. The only thing that could cause real trouble is a large scale L7 DDoS, but we have Cloudflare in front of us."|t(locale) }}</p>
|
|
<p>{{ "It costs me $5.00/month to run, which is pretty cheap. I'm not going to shut it down over hosting costs anytime soon, and there won't be any ads."|t(locale) }}</p>
|
|
<p>{{ "This service is not going to rug pull on you."|t(locale) }}</p>
|
|
</div>
|
|
</div>
|
|
</details>
|
|
|
|
<details open itemscope itemprop="mainEntity" itemtype="https://schema.org/Question">
|
|
<summary itemprop="name">{{ "How can I support this service?"|t(locale) }}</summary>
|
|
<div class="faq-content" itemscope itemprop="acceptedAnswer" itemtype="https://schema.org/Answer">
|
|
<div itemprop="text">
|
|
<p>{{ "I accept crypto donations. If you want to contribute, reach out at:"|t(locale) }} <a href="mailto:networkcatlol@gmail.com">networkcatlol@gmail.com</a></p>
|
|
</div>
|
|
</div>
|
|
</details>
|
|
</section>
|
|
{% endblock %}
|
|
|
|
{% block scripts %}
|
|
<script type="module" src="/static/script.js?v={{ js_version }}"></script>
|
|
{% endblock %}
|
|
|
|
{% block footer %}
|
|
<footer class="site-footer" aria-label="{{ "Site footer"|t(locale) }}">
|
|
<div class="footer-inner">
|
|
<div class="footer-left">
|
|
{% include "_footer.html" %}
|
|
<div class="footer-attribution">
|
|
<p>{{ "IP data provided by:"|t(locale) }}</p>
|
|
<ul>
|
|
<li><a href="https://www.maxmind.com/">MaxMind GeoLite2</a></li>
|
|
<li><a href="https://ipinfo.io/">IPinfo Lite</a></li>
|
|
<li><a href="https://db-ip.com/">DB-IP</a></li>
|
|
<li><a href="https://www.routeviews.org/">RouteViews ASN</a></li>
|
|
</ul>
|
|
</div>
|
|
</div>
|
|
<div class="footer-right">
|
|
{% include "_footer_lang.html" %}
|
|
</div>
|
|
</div>
|
|
</footer>
|
|
{% endblock %} |