Skip to content
Create a gist now

Instantly share code, notes, and snippets.

@qiao /ip.js
Created Jan 17, 2012

Node.js get client IP address
// snippet taken from http://catapulty.tumblr.com/post/8303749793/heroku-and-node-js-how-to-get-the-client-ip-address
function getClientIp(req) {
var ipAddress;
// The request may be forwarded from local web server.
var forwardedIpsStr = req.header('x-forwarded-for');
if (forwardedIpsStr) {
// 'x-forwarded-for' header may return multiple IP addresses in
// the format: "client IP, proxy 1 IP, proxy 2 IP" so take the
// the first one
var forwardedIps = forwardedIpsStr.split(',');
ipAddress = forwardedIps[0];
}
if (!ipAddress) {
// If request was not forwarded
ipAddress = req.connection.remoteAddress;
}
return ipAddress;
};
@jiyinyiyong

半年过去接口似乎变了, 我打印了 req 然后发现下面这样可以用. 总算还好

getClientIp = (req) ->
  x_ip = req.headers['x-forwarded-for']
  unless x_ip? then x_ip = req.connection.remoteAddress
  x_ip
@ghost
Unknown commented Nov 10, 2012
function getClientAddress(request){ 
    with(request)
        return (headers['x-forwarded-for'] || '').split(',')[0] 
            || connection.remoteAddress
}
@talon
talon commented Feb 27, 2013
var getClientAddress = function (req) {
    return (req.headers['x-forwarded-for'] || '').split(',')[0] 
        || req.connection.remoteAddress;
};

Will that work? If so that is really concise and quite nice. I didn't know you could get so creative with the ||'s!

@mohamedmohsin

i am using express 3.4.8 i have enable trusted proxy by app.enable('trust proxy') ,my req.headers does not contain X-Forward-For

@ArnaudValensi

The header can be x-forwarded-for or X-Forwarded-For, so:

var getClientIp = function(req) {
    return (req.headers["X-Forwarded-For"] ||
            req.headers["x-forwarded-for"] ||
            '').split(',')[0] ||
           req.client.remoteAddress;
};
@aderbas
aderbas commented Nov 5, 2015
var ip = req.headers["X-Forwarded-For"] || req.connection.remoteAddress;

Always returns the host IP and not the client IP in my case.

@LandonPowell

X-Forwarded-For? You're checking easily spoofed headers to get an IP?

@krynomore

If you install gentoo you don't need all of this

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Something went wrong with that request. Please try again.