如何使用python bottle framework

时间:2015-07-14 11:52:26

标签: python bottle

我需要使用python的客户端IP地址。我尝试了下面的代码,但它不能在服务器上运行:

from socket import gethostname, gethostbyname 
ip = gethostbyname(gethostname()) 
print ip

在服务器上,我得到了127.0.0.1'每次。有没有办法找到客户端的IP地址?

3 个答案:

答案 0 :(得分:11)

您获取服务器的IP地址,而不是服务器的客户端

您希望查看请求 REMOTE_ADDR,如下所示:

from bottle import Bottle, request

app = Bottle()

@app.route('/hello')
def hello():
    client_ip = request.environ.get('REMOTE_ADDR')
    return ['Your IP is: {}\n'.format(client_ip)]

app.run(host='0.0.0.0', port=8080)

编辑:有些人观察到,对于他们来说,REMOTE_ADDR的值始终是相同的IP地址(通常是127.0.0.1)。这是因为他们在代理(或负载均衡器)后面。在这种情况下,客户端的原始IP地址通常存储在标头HTTP_X_FORWARDED_FOR中。以下代码适用于任何一种情况:

@app.route('/hello')
def hello():
    client_ip = request.environ.get('HTTP_X_FORWARDED_FOR') or request.environ.get('REMOTE_ADDR')
    return ['Your IP is: {}\n'.format(client_ip)]

答案 1 :(得分:6)

服务器可能在代理后面。用于代理和转发支持:

request.environ.get('HTTP_X_FORWARDED_FOR') or request.environ.get('REMOTE_ADDR')

答案 2 :(得分:2)

如果您正在尝试获取外部IP,则需要从外部源获取它,即whatismyip.com或提供api的地方。如果您正在寻找,请查看请求模块http://docs.python-requests.org/