Skip to content
Create a gist now

Instantly share code, notes, and snippets.

@qiao /ip.js
Created

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
function getClientAddress(request){ 
    with(request)
        return (headers['x-forwarded-for'] || '').split(',')[0] 
            || connection.remoteAddress
}
@LegitTalon
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
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.