我需要使用python的客户端IP地址.我试过下面的代码,但它不能在服务器上运行:
from socket import gethostname, gethostbyname
ip = gethostbyname(gethostname())
print ip
Run Code Online (Sandbox Code Playgroud)
在服务器上,我每次都得到'127.0.0.1'.有没有办法找到客户端的IP地址?
ron*_*man 12
您获得的是服务器的IP地址,而不是服务器客户端的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)
Run Code Online (Sandbox Code Playgroud)
编辑:有些人观察到,对于他们来说,值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)]
Run Code Online (Sandbox Code Playgroud)
服务器可能在代理后面.用于代理和转发支持:
request.environ.get('HTTP_X_FORWARDED_FOR') or request.environ.get('REMOTE_ADDR')
Run Code Online (Sandbox Code Playgroud)
小智 2
如果您尝试获取外部 IP,则需要从外部源获取它,即whatismyip.com 或提供 api 的地方。如果这就是您正在寻找的内容,请查看请求模块http://docs.python-requests.org/