首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >水瓶应用中的双重IPv4和IPv6支持

水瓶应用中的双重IPv4和IPv6支持
EN

Stack Overflow用户
提问于 2014-02-10 09:17:26
回答 2查看 10K关注 0票数 12

是否可以在IPv4和IPv6 (即双IP堆栈)中运行侦听瓶?据我检查,可以使用以下两种方法在IPv4中运行:

代码语言:javascript
复制
app.run(host='0.0.0.0', port=port, debug=True)

或IPv6使用

代码语言:javascript
复制
app.run(host='::', port=port, debug=True)

但是我还没有找到一种同时在这两种情况下运行的方法(可以让我的IPv4应用程序的一个实例侦听IPv6,而另一个实例侦听IPv6,但两者都不能侦听同一个端口)。

谢谢!

更新(附加信息):

下面是Steffann的评论(谢谢!),我已经开始在IPv6上收听我的应用程序了:

代码语言:javascript
复制
* Running on http://[::]:1028/
* Restarting with reloader

然后用IPv6和IPv4卷发进行测试:

代码语言:javascript
复制
curl -g [::1]:1028/notify
curl 127.0.0.1:1028/notify

分别得到:

代码语言:javascript
复制
::1 - - [10/Feb/2014 12:04:51] "GET /notify HTTP/1.1" 200 -
::ffff:127.0.0.1 - - [10/Feb/2014 12:05:03] "GET /notify HTTP/1.1" 200 -

我对第二行的解释是“某人”( OS?( Flask所依赖的底层网络库?)正在将IPv4请求转换为IPv6请求。然而,我理解这与在经典的双堆栈设置中“本地地”支持IPv4是不一样的,也就是说,我会期望得到一些链接(这是我运行应用程序(Running on http://0.0.0.0:1028/)时得到的)。

代码语言:javascript
复制
127.0.0.1 - - [10/Feb/2014 12:05:03] "GET /notify HTTP/1.1" 200 -
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-02-10 23:21:46

所发生的情况是,操作系统自动将传入的IPv4请求附加到侦听IPv6套接字。IPv4地址是映射与IPv6地址的前缀,以::ffff:作为前缀。因此,来自127.0.0.1的传入127.0.0.1连接看起来像是来自IPv6 address ::ffff:127.0.0.1

从客户端的角度来看,它正在与IPv4服务器对话。客户端无法分辨出不同之处。从服务器的角度来看,每个人都使用IPv6进行连接。操作系统执行IPv4包和IPv6软件之间的映射。

这样做的效果是,您无需手动处理双堆栈编程,就可以开发软件。所有软件都可以为IPv6编写,并将所有地址作为IPv6地址处理。这可以简化代码(不需要同时处理侦听IPv4和侦听IPv6套接字等等)。虽然仍然提供了一个完整的双重堆栈的经验‘外部’。

因此,从系统外部看,您的服务是完全双堆栈的。但是,在应用程序本身中,您将看到用IPv6地址表示的整个世界,就像您在日志文件中显示的那样。这通常不会引起任何问题。不过,它可能会影响您处理ACL、日志记录和其他类似事情的方式。

票数 13
EN

Stack Overflow用户

发布于 2017-04-12 18:36:41

不幸的是,虽然Linux使用映射的IPv4地址来限定"::",但这并不适用于其他几个IPv6堆栈,例如Microsoft。*“将绑定到IPv6地址系列,出于安全原因,Windows和其他IPv6堆栈实现者已决定不将IPv4地址映射到IPv6地址空间,除非应用程序特别发出这样做的信号。就我所理解的讨论而言,这里的基本原理是,否则会发生意外的IPv4连接,从而破坏ACL或其他应用层安全机制。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21673068

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档