我需要使用python的客户端IP地址。我尝试了下面的代码,但它不能在服务器上运行:
from socket import gethostname, gethostbyname
ip = gethostbyname(gethostname())
print ip
在服务器上,我得到了127.0.0.1'每次。有没有办法找到客户端的IP地址?
答案 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/