UNPKG

get-client-ip

Version:

📍 A Lightweight Utility for Extracting the Real Client IP Address from Incoming HTTP Requests

69 lines (66 loc) 1.94 kB
'use strict'; var net = require('net'); // src/index.ts function $isIP(ip) { return typeof ip === "string" && net.isIP(ip) !== 0; } var LOOKUP_HEADERS = [ "x-client-ip", "x-forwarded-for", "forwarded-for", "x-forwarded", "x-real-ip", "cf-connecting-ip", "true-client-ip", "x-cluster-client-ip", "fastly-client-ip", "x-appengine-user-ip", "cf-pseudo-ipv4" ]; function $extractIpFromHeaders(req) { if ($isIP(req.ip)) return [req.ip]; if (!req.headers) return null; if ($isIP(req.headers.forwarded)) return [req.headers.forwarded]; for (let i = 0; i < LOOKUP_HEADERS.length; i++) { const ip = req.headers[LOOKUP_HEADERS[i]]; if (!ip) continue; if (Array.isArray(ip)) { const filteredIps = ip.filter((item) => $isIP(item.trim())); if (filteredIps.length > 0) return filteredIps.map((item) => item.trim()); } if (typeof ip === "string") { if ($isIP(ip.trim())) return [ip.trim()]; if (!ip.includes(",")) continue; const filteredIps = ip.split(",").filter((ip2) => $isIP(ip2.trim())); if (filteredIps.length > 0) { return filteredIps.map((item) => item.trim()); } } } return null; } function getClientIp(req, res, next) { if (!req) throw new Error("Request is undefined"); const ips = $extractIpFromHeaders(req); if (ips && ips.length > 0) { req.clientIp = ips[0]; req.clientIps = ips; next?.(); return ips[0]; } if ($isIP(req.socket.remoteAddress)) { req.clientIp = req.socket.remoteAddress; req.clientIps = [req.socket.remoteAddress]; next?.(); return req.socket.remoteAddress; } if ($isIP(req.connection.remoteAddress)) { req.clientIp = req.connection.remoteAddress; req.clientIps = [req.connection.remoteAddress]; next?.(); return req.connection.remoteAddress; } } exports.getClientIp = getClientIp; //# sourceMappingURL=index.cjs.map //# sourceMappingURL=index.cjs.map