繁体   English   中英

Python中的IPv6阅读器

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM