A small Node.js module to retrieve the request's IP address

Downloads in past


799303.3.02 years ago10 years agoMinified + gzip package size for request-ip in KB


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

Coverage Status npm version


yarn add request-ip

npm install request-ip --save

Getting Started

const requestIp = require('request-ip');

// inside middleware handler
const ipMiddleware = function(req, res, next) {
    const clientIp = requestIp.getClientIp(req); 

// on localhost you'll see if you're using IPv4 
// or ::1, ::ffff: if you're using IPv6

As Connect Middleware

const requestIp = require('request-ip');

app.use(function(req, res) {
    const ip = req.clientIp;

To see a full working code for the middleware, check out the examples folder.
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:
  1. 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.)
  2. CF-Connecting-IP (Cloudflare)
  3. Fastly-Client-Ip (Fastly CDN and Firebase hosting header when forwared to a cloud function)
  4. True-Client-Ip (Akamai and Cloudflare)
  5. X-Real-IP (Nginx proxy/FastCGI)
  6. X-Cluster-Client-IP (Rackspace LB, Riverbed Stingray)
  7. X-Forwarded, Forwarded-For and Forwarded (Variations of #2)
  8. appengine-user-ip (Google App Engine)
  9. req.connection.remoteAddress
  10. req.socket.remoteAddress
  11. req.connection.socket.remoteAddress
  13. Cf-Pseudo-IPv4 (Cloudflare fallback)
  14. request.raw (Fastify)

If an IP address cannot be found, it will return null.

Samples Use Cases

  • Getting a user's IP for geolocation.

Running the Tests

Make sure you have the necessary dev dependencies needed to run the tests:
npm install

Run the integration tests
npm test


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


Thank you to all the contributors!


The MIT License (MIT) - 2022