Huge News!Announcing our $40M Series B led by Abstract Ventures.Learn More
Socket
Sign inDemoInstall
Socket

@supercharge/request-ip

Package Overview
Dependencies
Maintainers
3
Versions
5
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@supercharge/request-ip

Retrieve a request’s IP address in Node.js

  • 1.2.0
  • latest
  • Source
  • npm
  • Socket score

Version published
Maintainers
3
Created
Source


Request IP

Retrieve a request’s IP address


Installation · Usage · Detecting the IP Address



Latest Version Monthly downloads

Follow @marcuspoehls and @superchargejs for updates!


Introduction

The @supercharge/request-ip package provides a function to retrieve a request’s IP address.

Installation

npm i @supercharge/request-ip

Usage

const RequestIp = require('@supercharge/request-ip')

const ip = RequestIp.getClientIp(request)

// for example '213.211.254.97' as an IP v4 address
// or '2001:0db8:85a3:0000:0000:8a2e:0370:7334' as an IP v6 address
// or 'undefined' if no IP address is available on the given request

Depending on your used web framework, you may use it in a middleware or route handler:

simple Express example

const { getClientIp } = require('@supercharge/request-ip')

const expressMiddleware = function (req, res, next) {
  req.ip = getClientIp(req)

  next()
}

simple hapi route handler example:

const Hapi = require('@hapi/hapi')
const { getClientIp } = require('@supercharge/request-ip')

const server = new Hapi.Server({
  host: 'localhost'
})

server.route({
  method: 'GET',
  path: '/login',
  handler: (request, h) => {
    const ip = getClientIp(request)

    return h.response(ip)
  }
})

Detecting the IP Address

The client’s IP address may be stored in different locations of the request instance varying between services.

Here’s the order of locations in which the packages searches for the requesting IP address:

  1. Checks HTTP request headers
    1. x-forwarded-for: this header may contain multiple IP address for (client/proxies/hops). This package extracts and returns the first IP address.
    2. x-forwarded, forwarded, forwarded-for as variants from x-forwarded-for possibly configured by proxies
    3. x-client-ip possibly configured by nginx
    4. x-real-ip possibly configured in nginx
    5. cf-connecting-ip from Cloudflare
    6. fastly-client-ip from Fastly and Firebase
    7. true-client-ip from Akamai and Cloudflare
    8. x-cluster-client-ip from Rackspace
  2. Checks the HTTP connection in request.connection and request.connection.socket
  3. Checks the HTTP socket in request.socket
  4. Checks the HTTP info in request.info
  5. Checks the raw HTTP request instance in request.raw
  6. Checks the request context used by AWS API Gateway/Lambda in request.requestContext

Credits

A huge thank you to Petar Bojinov for his request-ip package. I was using Petar’s package for two years in my hapi-rate-limitor plugin. It seems Petar is busy with other work and I felt the need to create my own package providing the functionality to retrieve a request’s IP address.

Contributing

Do you miss a way to find the request’s IP? We very much appreciate your contribution! Please send in a pull request 😊

  1. Create a fork
  2. Create your feature branch: git checkout -b my-feature
  3. Commit your changes: git commit -am 'Add some feature'
  4. Push to the branch: git push origin my-new-feature
  5. Submit a pull request 🚀

License

MIT © Supercharge


superchargejs.com  ·  GitHub @supercharge  ·  Twitter @superchargejs

Keywords

FAQs

Package last updated on 07 Mar 2022

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts

SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap
  • Changelog

Packages

npm

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc