[英]IPv6 reader in Python
我有一个小的Python代码来读取访问我在Flask网站上托管的Flask网站的客户端的IP地址:
from flask import Flask, request
app = Flask(__name__)
@app.route('/')
def hello_world():
ipread1 = request.environ.get('HTTP_X_REAL_IP', request.remote_addr)
print("The client IP1 is: %s" % (ipread1))
return 'Hello World!'
if __name__ == '__main__':
app.run()
每次刷新网页时,这都会在服务器日志中正确返回我的IPv4地址。 但是,我希望它给出我的IPv6地址(我已经检查过我的确有)。
为此,我尝试更改:
app.run()
到app.run(host='::')
但这仍然只是我的IPv4地址。 如何强制Python提供我的IPv6地址?
考虑用app.run()
的第一种情况。 您得到的是客户端的IPV4地址,例如:
The client IP1 is: 127.0.0.1
现在,如果您添加参数host app.run(host='::')
您将在IPv6套接字上侦听并得到类似以下内容:
The client IP1 is: ::ffff:127.0.0.1
客户端使用IPv6吗?
否,客户端仍在使用其IPv4地址并与IPv4服务器通信。 因此,从它的角度看,没有区别。 所发生的变化是,您使用以下格式获取了v4-mapped-on-v6 address
:
000 ... 000 | FFFF | IPv4 Address
80 bits 16 bits 32 bits
例如,参见相应的RFC 。
这样,从服务器的角度来看,它看起来像是来自IPv6主机,并且将能够使用双栈IPv4 / IPv6。
如果您希望看到不同的内容,则必须更改客户端发送请求的方式。
PythonAnywhere处理的所有请求都通过IPv4来处理,因此您不会看到IPv6地址。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.