@catho/request-public-ip
Version:
Node.js module for retrieving a request's public IP address
40 lines (35 loc) • 1.3 kB
JavaScript
;
Object.defineProperty(exports, '__esModule', { value: true });
var isPublicIp = require('./is-public-ip.js');
function getClientPublicIpFromHeaders(headers) {
// Used by Amazon EC2, Heroku, and others.
if (isPublicIp.isPublicIp(headers["x-client-ip"])) {
return headers["x-client-ip"];
}
// Used by Load-balancers (AWS ELB) or proxies.
const xForwardedFor = getClientPublicIpFromXForwardedFor(headers["x-forwarded-for"]);
if (xForwardedFor) {
return xForwardedFor;
}
// Used by Akamai and Cloudflare
if (isPublicIp.isPublicIp(headers["true-client-ip"])) {
return headers["true-client-ip"];
}
// Used by nginx proxy/fcgi; alternative to x-forwarded-for
if (isPublicIp.isPublicIp(headers["x-real-ip"])) {
return headers["x-real-ip"];
}
}
function getClientPublicIpFromXForwardedFor(input) {
if (!input)
return;
const ips = Array.isArray(input) ? input : input.split(",");
for (let i = 0; i < ips.length; i++) {
const ip = ips[i].trim();
if (isPublicIp.isPublicIp(ip)) {
return ip;
}
}
}
exports.getClientPublicIpFromHeaders = getClientPublicIpFromHeaders;
exports.getClientPublicIpFromXForwardedFor = getClientPublicIpFromXForwardedFor;