npm-ip-device-parser v1.0.0
ip-device-parser
Exress middleware to Parse IP Adress and Client Device Information from the request and it will hold following data.
Installation
$ npm install ip-device-parserAPI
const express = require('express');
const ipAndDeviceParser = require('ip-device-parser');
const app = express();
app.use(ipAndDeviceParser());You can fetch ip and device infor form req.clientInfo where req is express request object
// req.clientInfo
{
agent: {
browser: {
name: 'Chrome Mobile',
version: '67.0.3396'
},
device: {
name: 'OnePlus ONEPLUS A5000',
version: '0.0.0'
},
os: {
name: 'Android',
version: '8.1.0'
}
},
ip: '2xx5:2x5:1xx6:2xx3:2xxc:dxx3:7xx2:6xxa'
}How It Works
It looks for specific headers in the request and falls back to some defaults if they do not exist.
The following is the order we use to determine the user ip from the request.
X-Client-IPX-Forwarded-For(Header may return multiple IP addresses in the format: "client IP, proxy 1 IP, proxy 2 IP", so we take the the first one.)CF-Connecting-IP(Cloudflare)True-Client-Ip(Akamai and Cloudflare)X-Real-IP(Nginx proxy/FastCGI)X-Cluster-Client-IP(Rackspace LB, Riverbed Stingray)X-Forwarded,Forwarded-ForandForwarded(Variations of #2)req.connection.remoteAddressreq.socket.remoteAddressreq.connection.socket.remoteAddressreq.info.remoteAddress
If an IP address cannot be found, it will return null.
References
http://docs.aws.amazon.com/elasticloadbalancing/latest/classic/x-forwarded-headers.html http://stackoverflow.com/a/11285650 http://www.squid-cache.org/Doc/config/forwarded_for/ https://support.cloudflare.com/hc/en-us/articles/200170986-How-does-Cloudflare-handle-HTTP-Request-headers- http://www.rackspace.com/knowledge_center/article/controlling-access-to-linux-cloud-sites-based-on-the-client-ip-address https://splash.riverbed.com/docs/DOC-1926
Thanks Note
~pbojinov's work on IP address headers and request ip package
7 years ago