Demo
Archived
ResolverOne was a hackathon project, and the DNS service is offline. The commands on this page no longer work. Do not send DNS queries or email to rslvr.one or resolver.one, because these domains expired and a new owner can control them.
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"
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? The service is offline, so these commands no longer return data.
- Want to know how it worked? Read the Getting Started guide.
Ready to get started? View Documentation