[Problema] IP do cliente com x-forwarded-for

233 views
Skip to first unread message

Willian R Sabião

unread,
Nov 6, 2014, 8:35:53 AM11/6/14
to nod...@googlegroups.com
Bom dia galera,


Seguinte, estou com um problema em pegar o IP do cliente numa aplicação em node.js para saber a localização do cliente via geoip.


O que eu faço na aplicação?
Faço uma leitura do parâmetro no header, usando req.headers['x-forwarded-for'] e ele me retorna o ip da requisição.

Ok, então qual o problema?
req.headers['x-forwarded-for'] está me retornando 3 ips em produção, que podem ser por ter passado por um apache e pelo loadbalancer da amazon, pois, o req.headers['x-forwarded-for'] me retorna o ip local(127.0.0.1), o ip do cliente(200.xxx.xxx.x) e o ip da amazon(10.xx.xx.x). ex.: 127.0.0.1, XXX.XXX.XX.X, 10.XX.XX.X.X

O problema é que não acho confiável buscar o segundo ip sempre, já que me retorna por vírgulas, eu poderia fazer um split e pegar o segundo elemento do array, tem alguma forma confiável de saber o ip do usuário? Alguma regra? Outro parâmetro?

Na busca que fiz no nosso querido google, já vi falando para pegar o primeiro elemento que é sempre ele o ip do cliente, mas no meu caso não é, teve artigo que o dev pega o penúltimo IP, mas não tinha nenhuma explicação disso.

Alguém já teve esse problema, como fez para solucionar? 

Ahh e uso o express nessa aplicação.

Vlw, abs.

Marcos Bérgamo

unread,
Nov 6, 2014, 11:51:01 AM11/6/14
to nod...@googlegroups.com
Pelo que eu entendi do Draft, o primeiro deveria ser sempre o correto seguido dos proxies. 

Segue o texto ai, vai que :p


5.2.  Forwarded For

   The "for" parameter is used to disclose information about the client
   that initiated the request and following proxies in a chain of
   proxies.  When proxies choose to use the "for" parameter, its default
   configuration SHOULD contain an obfuscated identifier as described in
   Section 6.3.  If the server receiving proxied requests requires some
   address-based functionality, this parameter MAY instead contain an
   IP-address (and, potentially, a port number).  A third option is the
   "unknown" identifier described in Section 6.2.

   The syntax of a "for" value, after potential quoted-string
   unescaping, conforms to the "node" ABNF described in Section 6.

   In a chain of proxy servers where this is fully utilized, the first
   for-parameter will disclose the client where the request was first
   made, followed by any subsequent proxy identifiers.  The last proxy
   in the chain is not part of the list of for-parameters.  The last
   proxy's IP address, and optionally a port number, are, however,
   readily available as the remote IP address at the transport layer.
   It can, however, be more relevant to read information about the last 
   proxy from preceding "Forwarded" header field's by-parameter, if
   present.

--
Você recebeu essa mensagem porque está inscrito no grupo "Node.js Brasil" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para nodebr+un...@googlegroups.com.
Para mais opções, acesse https://groups.google.com/d/optout.

Willian R Sabião

unread,
Nov 27, 2014, 12:15:50 PM11/27/14
to nod...@googlegroups.com
Então, mal demorar para voltar aqui.

Esses dias eu descobri o problema. Vamos lá:

Para eu simular que estava em outro país, sem ter que usar um parâmetro na querystring, usei um programa no meu mac que chama SurfEasyVPN, que faz um esquema de proxy e assim simulo que estou em outro país. OK.

Só que ao fazer isso, não sei porque diabos, este programa passa mais um ip no x-forwarded-for que é o 127.0.0.1. Logo achei que fosse algo no node.js ou no apache configurado errado.

Enfim, foi vacilo meu mesmo =D
Agora ta funcionando tudo normal haha.


Vlw pela ajuda ai.

Marcos Bérgamo

unread,
Nov 27, 2014, 12:17:41 PM11/27/14
to nod...@googlegroups.com
hehe de buenas =D

é foda quando descobrimos que por causa de uma besteirinha o negocio não tava funfando haha
Reply all
Reply to author
Forward
0 new messages