UNPKG

@catho/request-public-ip

Version:

Node.js module for retrieving a request's public IP address

40 lines (35 loc) 1.3 kB
'use strict'; 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;