Estou criando um site no qual os usuários podem fazer logon e baixar arquivos, usando a microestrutura Flask (baseada em Werkzeug ) que usa Python (2.6 no meu caso).
Preciso obter o endereço IP dos usuários quando eles efetuam logon (para fins de log). Alguém sabe como fazer isso? Certamente existe uma maneira de fazê-lo com Python?
python
flask
ip-address
werkzeug
Jon Cox
fonte
fonte
HTTP_X_FORWARDED_FOR
portanto, certifique-se de não acabar com o host local para cada solicitação.Os proxies podem tornar isso um pouco complicado, verifique o ProxyFix ( Flask docs ) se você estiver usando um. Dê uma olhada no
request.environ
seu ambiente particular. Com o nginx, algumas vezes, faço algo assim:Quando proxies, como nginx, encaminham endereços, geralmente incluem o IP original em algum lugar nos cabeçalhos da solicitação.
Atualização Veja a implementação do flask-security . Mais uma vez, revise a documentação sobre o ProxyFix antes de implementar. Sua solução pode variar de acordo com o seu ambiente específico.
fonte
Na verdade, o que você encontrará é que, ao simplesmente obter o seguinte, você obterá o endereço do servidor:
Se você deseja o endereço IP do cliente, use o seguinte:
fonte
request.remote_addr
soa como uma propriedade que deve obter um endereço remoto, dependendo se o proxy reverso é confiável.O endereço IP do usuário pode ser recuperado usando o seguinte trecho:
fonte
Eu tenho o Nginx e com o Nginx Config abaixo :
solução @ tirtha-r funcionou para mim
Minha solicitação e resposta:
fonte
O código abaixo sempre fornece o IP público do cliente (e não um IP privado atrás de um proxy).
fonte
httpbin.org usa este método:
fonte
127.0.0.1
devido a proxy, não muito útil.Se você usar o Nginx atrás de outro balanceador, por exemplo, o AWS Application Balancer, HTTP_X_FORWARDED_FOR retornará uma lista de endereços. Pode ser corrigido assim:
fonte
Se você estiver usando o ambiente Gunicorn e Nginx, o seguinte modelo de código funcionará para você.
fonte
Isso deve fazer o trabalho. Ele fornece o endereço IP do cliente (host remoto).
Observe que esse código está sendo executado no lado do servidor.
fonte