npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

ipware

v2.0.0

Published

Returns the real IP address of users in Node.js

Downloads

78,309

Readme

Node IPware

A Node application to retrieve user's IP address

status-image version-image download-image

Overview

Best attempt to get user's (client's) real ip-address while keeping it DRY.

How to install

1. npm install ipware
2. git clone http://github.com/un33k/node-ipware
    a. npm install node-ipware
3. wget https://github.com/un33k/node-ipware/zipball/master
    a. unzip the downloaded file
    b. npm install node-ipware

How to use

 // In your js file (e.g. app.js)
 var get_ip = require('ipware')().get_ip;
 app.use(function(req, res, next) {
     var ip_info = get_ip(req);
     console.log(ip_info);
     // { clientIp: '127.0.0.1', clientIpRoutable: false }
     next();
 });

 // `get_ip` also adds two fields to your request object
 // 1. `clientIp`, 2. `clientIpRoutable`
 // Where:
 //    `clientIp` holds the client's IP address
 //    'clientIpRoutable` is `true` if user's IP is `public`. (externally route-able)
 //                       is `false` if user's IP is `private`. (not externally route-able)

 // Advanced option: By default the left most address in the `HTTP_X_FORWARDED_FOR` or `X_FORWARDED_FOR`
 // is returned.  However, depending on your preference and needs, you can change this
 // behavior by passing the `right_most_proxy=True` to the API.
 // Note: Not all proxies are equal. So left to right or right to left preference is not a
 // rule that all proxy servers follow.

 var ip_info = get_ip(req, right_most_proxy=True)

Advanced users:

 // 1. Trusted Proxies:
 // *************************
 // To only get client ip addresses from your own trusted proxy server(s), use `get_trusted_ip()`.
 // In your js file (e.g. app.js)
 var get_trusted_ip = require('ipware')().get_trusted_ip;
 var trusted_proxies = ['177.144.11.100', '177.144.11.101'];
 app.use(function(req, res, next) {
     var ip_info = get_trusted_ip(req, trusted_proxies);
     console.log(ip_info);
     // { clientIp: '177.100.44.22', clientIpRoutable: true }
     next();
 });

 // Alternatively, you can pass in the trusted proxies via the configuration file.
 {
   ...
   "IPWARE_TRUSTED_PROXY_LIST": [
     '177.144.11.100',
     '177.144.11.101'
   ],
   ...
 }

 // 2. Customizable configuration file:
 // ***********************************
 // You can also use your own config file as below.
 // for `IPWARE_HTTP_HEADER_PRECEDENCE_ORDER` items, the
 // check is done from top to bottom where the request `headers`
 // is examined for the existence of the IP address field.

 // All lists that start with `IPV` are examined and if an IP
 // address starts with any of those patterns the IP is considered
 // `private`, otherwise the IP is considered `public` which means
 // the IP is externally routable. (reachable through the Internet :)

 // Simply copy the following content into a JSON file and
 // modify it to suit your needs and place it in your project
 // under version control.

 // Then you can use it like:
 // var get_ip = require('ipware')('../path/to/your/conf.json').get_ip;

 {
   "IPWARE_HTTP_HEADER_PRECEDENCE_ORDER": [
     "HTTP_X_FORWARDED_FOR",
     "HTTP_CLIENT_IP",
     "HTTP_X_REAL_IP",
     "HTTP_X_FORWARDED",
     "HTTP_X_CLUSTER_CLIENT_IP",
     "HTTP_FORWARDED_FOR",
     "HTTP_FORWARDED",
     "HTTP_VIA",
     "X_FORWARDED_FOR",
     "REMOTE_ADDR"
   ],

   "IPWARE_HTTP_HEADER_PROXY_PRECEDENCE_ORDER": [
     "HTTP_X_FORWARDED_FOR",
     "X_FORWARDED_FOR"
   ],

   "IPWARE_TRUSTED_PROXY_LIST": [
   ],

   "IPV4_EXTERNALLY_NON_ROUTABLE_IP_PREFIX": [
     "0."
   ],

   "IPV4_CLASS_A_PRIVATE_BLOCK_IP_PREFIX": [
     "10."
   ],

   "IPV4_CARRIER_GRADE_NAT_IP_PREFIX": [
     "100.64.",
     "100.65.",
     "100.66.",
     "100.67.",
     "100.68.",
     "100.69.",
     "100.70.",
     "100.71.",
     "100.72.",
     "100.73.",
     "100.74.",
     "100.75.",
     "100.76.",
     "100.77.",
     "100.78.",
     "100.79.",
     "100.80.",
     "100.81.",
     "100.82.",
     "100.83.",
     "100.84.",
     "100.85.",
     "100.86.",
     "100.87.",
     "100.88.",
     "100.89.",
     "100.90.",
     "100.91.",
     "100.92.",
     "100.93.",
     "100.94.",
     "100.95.",
     "100.96.",
     "100.97.",
     "100.98.",
     "100.99.",
     "100.100.",
     "100.101.",
     "100.102.",
     "100.103.",
     "100.104.",
     "100.105.",
     "100.106.",
     "100.107.",
     "100.108.",
     "100.109.",
     "100.110.",
     "100.111.",
     "100.112.",
     "100.113.",
     "100.114.",
     "100.115.",
     "100.116.",
     "100.117.",
     "100.118.",
     "100.119.",
     "100.120.",
     "100.121.",
     "100.122.",
     "100.123.",
     "100.124.",
     "100.125.",
     "100.126.",
     "100.127."
   ],

   "IPV4_LOCAL_LINK_BLOCK_IP_PREFIX": [
     "169.254."
   ],

   "IPV4_CLASS_B_PRIVATE_BLOCK_IP_PREFIX": [
     "172.16.",
     "172.17.",
     "172.18.",
     "172.19.",
     "172.20.",
     "172.21.",
     "172.22.",
     "172.23.",
     "172.24.",
     "172.25.",
     "172.26.",
     "172.27.",
     "172.28.",
     "172.29.",
     "172.30.",
     "172.31."
   ],

   "IPV4_INAA_SPECIAL_ADDRESS_REGISTRY_IP_PREFIX": [
     "192.0.0."
   ],

   "IPV4_DOCUMENTATION_AND_EXAMPLE_CODE_192_IP_PREFIX": [
     "192.0.2."
   ],

   "IPV4_CLASS_C_PRIVATE_BLOCK_IP_PREFIX": [
     "192.168."
   ],

   "IPV4_INNER_NETWORK_COMMUNICATION_BETWEEN_TWO_SEPARATE_SUBNETS_IP_PREFIX": [
     "198.18.",
     "198.19."
   ],

   "IPV4_DOCUMENTATION_AND_EXAMPLE_CODE_198_IP_PREFIX": [
     "198.51.100."
   ],

   "IPV4_DOCUMENTATION_AND_EXAMPLE_CODE_203_IP_PREFIX": [
     "203.0.113."
   ],

   "IPV4_MULTICAST_IP_PREFIX": [
     "224.",
     "225.",
     "226.",
     "227.",
     "228.",
     "229.",
     "230.",
     "231.",
     "232.",
     "233.",
     "234.",
     "235.",
     "236.",
     "237.",
     "238.",
     "239."
   ],

   "IPV4_RESERVED_IP_PREFIX": [
     "240.",
     "241.",
     "242.",
     "243.",
     "244.",
     "245.",
     "246.",
     "247.",
     "248.",
     "249.",
     "250.",
     "251.",
     "252.",
     "253.",
     "254."
   ],
   
   "IPV4_BRODCAST_IP_PREFIX": [
     "255."
   ],

   "IPV4_LOOPBACK_IP_PREFIX": [
     "127."
   ],

   "IPV6_EXAMPLE_CODE_DOCUMENTATION_IP_PREFIX": [
     "2001:db8:"
   ],

   "IPV6_PRIVATE_BLOCK_IP_PREFIX": [
     "fc00:"
   ],

   "IPV6_LINK_LOCAL_UNICAST_IP_PREFIX": [
     "fe80:"
   ],

   "IPV6_MULTICAST_IP_PREFIX": [
     "ff00:"
   ],

   "IPV6_LOOPBACK_IP_PREFIX": [
     "::1"
   ]
 }

Running the tests

To run the tests against the current environment:

npm install
npm test

License

Released under a (MIT) license.

Version

X.Y.Z Version

`MAJOR` version -- when you make incompatible API changes,
`MINOR` version -- when you add functionality in a backwards-compatible manner, and
`PATCH` version -- when you make backwards-compatible bug fixes.

Sponsors

Surge