| 123456789101112131415161718192021222324252627282930313233343536373839404142434445 |
- /**
- * 与 requestLog 相同:本地 ip2region.xdb,仅支持 IPv4。
- */
- const path = require('path')
- const ipSearcher = require('../../plugin/ip2region')
- let _searcher = null
- function getSearcher() {
- if (!_searcher) {
- _searcher = ipSearcher.newWithFileOnly(path.join(__dirname, '../../plugin/ip2region/ip2region.xdb'))
- }
- return _searcher
- }
- /**
- * @param {string|null|undefined} ip
- * @returns {Promise<string>} 可读属地,失败或非法为「未知」
- */
- async function lookupIpv4Region(ip) {
- const s = String(ip || '').trim()
- if (!s || !ipSearcher.isValidIp(s)) return '未知'
- try {
- const r = await getSearcher().search(s)
- const raw = r?.region
- if (!raw || typeof raw !== 'string') return '未知'
- return raw.split('|').filter(Boolean).join(' · ')
- } catch {
- return '未知'
- }
- }
- /**
- * 从 server 字段形如 host:port 取 IP
- */
- function extractIpFromServer(server) {
- if (!server || typeof server !== 'string') return null
- const host = server.split(':')[0].trim()
- return ipSearcher.isValidIp(host) ? host : null
- }
- module.exports = {
- lookupIpv4Region,
- extractIpFromServer
- }
|