1 /*!
2 * forwarded
3 * Copyright(c) 2014 Douglas Christopher Wilson
4 * MIT Licensed
5 */
7 /**
8 * Module exports.
9 */
11 module.exports = forwarded
13 /**
14 * Get all addresses in the request, using the `X-Forwarded-For` header.
15 *
16 * @param {Object} req
17 * @api public
18 */
20 function forwarded(req) {
21 if (!req) {
22 throw new TypeError('argument req is required')
23 }
25 // simple header parsing
26 var proxyAddrs = (req.headers['x-forwarded-for'] || '')
27 .split(/ *, */)
28 .filter(Boolean)
29 .reverse()
30 var socketAddr = req.connection.remoteAddress
31 var addrs = [socketAddr].concat(proxyAddrs)
33 // return all addresses
34 return addrs
35 }