From 236a548f5810e019da617d3dea87b1d9248e3cb8 Mon Sep 17 00:00:00 2001 From: CN-JS-HuiBai Date: Sun, 5 Apr 2026 01:44:53 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B7=BB=E5=8A=A0=E9=94=99=E8=AF=AF=E4=BF=AE?= =?UTF-8?q?=E5=A4=8D?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/geo-service.js | 21 ++++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/server/geo-service.js b/server/geo-service.js index 68a4726..dc6e360 100644 --- a/server/geo-service.js +++ b/server/geo-service.js @@ -1,4 +1,6 @@ const axios = require('axios'); +const net = require('net'); +const dns = require('dns').promises; const db = require('./db'); /** @@ -27,9 +29,22 @@ function normalizeGeo(geo) { return geo; } -async function getLocation(ip) { - // Normalize IP (strip port if present) - const cleanIp = ip.split(':')[0]; +async function getLocation(target) { + // Normalize target (strip port if present) + const cleanTarget = target.split(':')[0]; + + // Resolve domain to IP if needed + let cleanIp = cleanTarget; + if (net.isIP(cleanTarget) === 0) { + try { + console.log(`[Geo Service] Resolving domain to IP: ${cleanTarget}`); + const lookup = await dns.lookup(cleanTarget); + cleanIp = lookup.address; + } catch (err) { + console.error(`[Geo Service] DNS resolution failed for ${cleanTarget}:`, err.message); + return null; + } + } // Skip local/reserved IPs if (isLocalIp(cleanIp)) {