Live Demo
Try ResolverOne
Test the service with these example queries in your terminal:
- 🚀 Basic Examples
- ⚡ Advanced Queries
- 💻 Programming Examples
# Query your own public IP
dig TXT $(curl -s icanhazip.com).rslvr.one
# Query Google's DNS
dig TXT 8.8.8.8.rslvr.one
# Query Cloudflare's DNS
dig TXT 1.1.1.1.rslvr.one
Expected Output Format:
"US|United States|North America|NA|AS15169|Google LLC|google.com"
# Use TCP instead of UDP
dig TXT 8.8.8.8.rslvr.one +tcp
# Get only the answer section
dig TXT 1.1.1.1.rslvr.one +short
# Query with fallback DNS server
dig TXT 1.1.1.1.rslvr.one
# Trace the full DNS resolution
dig TXT 8.8.8.8.rslvr.one +trace
Python:
# /// script
# dependencies = [
# "dnspython>=2.0.0",
# ]
# ///
import dns.resolver
def get_ip_location(ip_address):
resolver = dns.resolver.Resolver()
// No custom nameserver needed
result = dns.resolver.resolve(f"{ip_address}.rslvr.one", 'TXT')
return str(result[0]).strip('"')
# Example usage
location = get_ip_location("8.8.8.8")
print(location) # "US|United States|North America|NA|AS15169|Google LLC|google.com"
JavaScript (Node.js):
const dns = require('dns').promises;
async function getIPLocation(ip) {
try {
const resolver = new dns.Resolver();
// No custom nameserver needed
const records = await dns.resolveTxt(`${ip}.rslvr.one`);
return records[0][0];
} catch (error) {
console.error('DNS lookup failed:', error);
}
}
// Example usage
getIPLocation('8.8.8.8').then(result => {
console.log(result); // "US|United States|North America|NA|AS15169|Google LLC|google.com"
});
Arduino/ESP32:
#include <WiFi.h>
#include <WiFiUdp.h>
void getIPLocation(const char* ip) {
WiFiUDP udp;
// Construct DNS query for ip.rslvr.one TXT record
// Implementation depends on your DNS library
Serial.printf("Location for %s: [DNS response]\n", ip);
}
void setup() {
Serial.begin(115200);
WiFi.begin("your-ssid", "your-password");
while (WiFi.status() != WL_CONNECTED) {
delay(1000);
Serial.println("Connecting to WiFi...");
}
getIPLocation("8.8.8.8");
}
Response Format Breakdown
When you query 8.8.8.8.rslvr.one, you get back pipe-separated values:
"US|United States|North America|NA|AS15169|Google LLC|google.com"
│ │ │ │ │ │ │
│ │ │ │ │ │ └─ AS Domain
│ │ │ │ │ └─ AS Name
│ │ │ │ └─ ASN (Autonomous System Number)
│ │ │ └─ Continent Code
│ │ └─ Continent Name
│ └─ Country Name
└─ Country Code (ISO 3166-1 alpha-2)
Parsing the Response
- Bash
- Python
#!/bin/bash
response=$(dig TXT 8.8.8.8.rslvr.one +short | tr -d '"')
IFS='|' read -ra parts <<< "$response"
echo "Country Code: ${parts[0]}"
echo "Country: ${parts[1]}"
echo "Continent: ${parts[2]}"
echo "Continent Code: ${parts[3]}"
echo "ASN: ${parts[4]}"
echo "AS Name: ${parts[5]}"
echo "AS Domain: ${parts[6]}"
# /// script
# dependencies = [
# "dnspython>=2.0.0",
# ]
# ///
import dns.resolver
def parse_ip_location(ip_address):
resolver = dns.resolver.Resolver()
// No custom nameserver needed
result = dns.resolver.resolve(f"{ip_address}.rslvr.one", 'TXT')
data = str(result[0]).strip('"').split('|')
return {
'country_code': data[0],
'country': data[1],
'continent': data[2],
'continent_code': data[3],
'asn': data[4],
'as_name': data[5],
'as_domain': data[6]
}
# Example
geo_data = parse_ip_location("8.8.8.8")
print(f"Google's DNS is in {geo_data['country']} ({geo_data['country_code']})")
Health Check
Want to test if our service is running? Query the health endpoint:
dig TXT health.rslvr.one
You should get back:
"OK"
Monitor real-time service status: status.shinypebble.dev/status/r1
Performance Testing
Speed Test
# Time a single query
time dig TXT 8.8.8.8.rslvr.one +short
# Run multiple queries to test consistency
for i in {1..10}; do
time dig TXT 1.1.1.1.rslvr.one +short >/dev/null
done
Bandwidth Usage
# DNS query response
dig TXT 8.8.8.8.rslvr.one +short | wc -c
# ~80 bytes (just the geo data)
# Compare to typical HTTP IP Location API
curl -s "https://ipapi.co/8.8.8.8/json/" | wc -c
# ~800+ bytes (JSON response with similar data)
Common Use Cases to Try
1. Check Your Device's Location
# First get your public IP
MY_IP=$(curl -s ifconfig.me)
echo "My IP: $MY_IP"
# Then query its location
dig TXT $MY_IP.rslvr.one +short
2. Validate VPN Location
# Before VPN
dig TXT $(curl -s ifconfig.me).rslvr.one +short
# Connect to VPN, then check again
dig TXT $(curl -s ifconfig.me).rslvr.one +short
3. Batch Process Multiple IPs
# Create a list of IPs to check
echo "8.8.8.8
1.1.1.1
208.67.222.222" > ips.txt
# Check each one
while read ip; do
echo "IP: $ip"
dig TXT $ip.rslvr.one +short
echo "---"
done < ips.txt
Questions or Issues?
- Something not working? Email us at hi@resolver.one
- Want to integrate this? Check out our Getting Started guide
- Need higher limits? See our Pricing
Ready to get started? View Documentation