ipware

2.0.0 • Public • Published

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

Package Sidebar

Install

npm i ipware

Weekly Downloads

8,788

Version

2.0.0

License

MIT

Unpacked Size

44.1 kB

Total Files

9

Last publish

Collaborators

  • un33kvu