requests-ip
A tiny Node.js module for retrieving a request's IP address.
Installation
Yarn
yarn add requests-ip
npm
npm install exporess-request-ip --save
Getting Started
const requestIp = require('requests-ip');
const ipMiddleware = function(req, res, next) {
const clientIp = requestIp.getClientIp(req);
next();
};
As Connect Middleware
const requestIp = require('requests-ip');
app.use(requestIp.mw())
app.use(function(req, res) {
const ip = req.clientIp;
res.end(ip);
});
The connect-middleware also supports retrieving the ip address under a custom attribute name, which also works as a container for any future settings.
How It Works
It looks for specific headers in the request and falls back to some defaults if they do not exist.
The user ip is determined by the following order:
X-Client-IP
X-Forwarded-For
(Header may return multiple IP addresses in the format: "client IP, proxy 1 IP, proxy 2 IP", so we take the first one.)CF-Connecting-IP
(Cloudflare)Fastly-Client-Ip
(Fastly CDN and Firebase hosting header when forwared to a cloud function)True-Client-Ip
(Akamai and Cloudflare)X-Real-IP
(Nginx proxy/FastCGI)X-Cluster-Client-IP
(Rackspace LB, Riverbed Stingray)X-Forwarded
, Forwarded-For
and Forwarded
(Variations of #2)appengine-user-ip
(Google App Engine)req.connection.remoteAddress
req.socket.remoteAddress
req.connection.socket.remoteAddress
req.info.remoteAddress
Cf-Pseudo-IPv4
(Cloudflare fallback)request.raw
(Fastify)
If an IP address cannot be found, it will return null
.
Samples Use Cases
- Getting a user's IP for geolocation.
- For the zip, notall, netcheck case.
Running the Tests
Make sure you have the necessary dev dependencies needed to run the tests:
npm install
Run the integration tests
npm test
Building
Compiles the current ES6 code to ES5 using Babel.
npm build
Release Notes
See the wonderful changelog
To generate a new changelog, install github-changelog-generator then run npm run changelog
. This will require being on Ruby >= 3
Contributors
Thank you to all the contributors!
License
The MIT License (MIT) - 2022