当前位置: 首页 > 知识库问答 >
问题:

Flask应用程序中对IPv4和IPv6的双重支持

姬庆
2023-03-14
app.run(host='0.0.0.0', port=port, debug=True)
app.run(host='::', port=port, debug=True)
* Running on http://[::]:1028/
* Restarting with reloader
curl -g [::1]:1028/notify
curl 127.0.0.1:1028/notify
::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 -

我对第二行的解释是“某人”(操作系统?Flask所依赖的底层网络库?)正在将IPv4请求转换为IPv6请求。但是,我理解,在传统的双堆栈设置中“本机”支持IPv4并不相同,即我希望有某种链接(这是我运行应用程序(运行在http://0.0.0.0:1028/)时得到的结果)

127.0.0.1 - - [10/Feb/2014 12:05:03] "GET /notify HTTP/1.1" 200 -

共有1个答案

胡修伟
2023-03-14

发生的情况是,操作系统自动将传入的IPv4请求附加到侦听的IPv6套接字。通过在IPv4地址前缀::FFFF:将其映射到IPv6地址。因此,从127.0.0.1传入的IPv4连接看起来像是来自IPv6地址::FFFF:127.0.0.1

从客户端的角度来看,它是在与IPv4服务器通话。客户无法分辨出其中的区别。从服务器的角度来看,每个人都在使用IPv6进行连接。操作系统执行IPv4数据包和IPv6软件之间的映射。

这样做的效果是,您可以开发软件,而不必手动处理双堆栈编程。所有软件都可以为IPv6编写,并将所有地址作为IPv6地址处理。这可以简化代码(不需要处理同时具有侦听IPv4和侦听IPv6套接字等),同时仍然向“外部”提供完整的双栈体验。

 类似资料:
  • 问题内容: 我们的Java程序之一在启动时仅监听IPv6(8080) 例如 问题是无法从外部访问(本地主机除外),要解决此问题,我需要手动添加 但这使得该程序仅适用于IPv4网络。 是否可以执行上述类似 sshd的 操作,并且都支持IPv4和IPv6? 问题答案: 我怀疑这不是Java编程问题,而是OS网络堆栈/ OS网络配置问题: http://coding.derkeiler.com/Arch

  • 我们的一个Java程序启动时,它只监听IPv6(8080) 例如。 问题是它不能从外部访问(除了localhost之外),为了解决这个问题,我手动添加了这个 是否可以像上面的sshd一样,同时支持IPv4和IPv6?

  • 所以我在写一个P2P多人游戏。服务器与每个玩家建立连接(UDP),然后让玩家直接彼此连接(使用UDP Holepunching技术)。 然后我在父母家做了测试,然后就停止了工作。 null 还是这样的设置注定要失败?

  • 如果是这样,那么为什么有必要为IPv6发明范围ID,而不是采用与IPv4相同的解决方案呢? 此外,scope_id仅仅用于区分具有相同链路本地地址的接口,还是还有其他用例?

  • 目前,我已经使用spring boot hikari连接池编写了我的项目,并使用fetchAsync方法获取结果。但根据这篇文档,反应式抓取阻止了JDBC API。 有没有可能用flux封装fetchAsync方法的CompletionStage对象并使其成为反应性的? 是否有通过连接池支持r2dbc的计划,以及时间表(如果正在进行)

  • 主要内容:调试模式要测试Flask安装是否成功,在编辑器中输入以下代码,并保存到文件: 中。 在项目中导入模块是强制性的。 Flask类的一个对象是WSGI应用程序。 Flask构造函数将当前模块的名称()作为参数。 Flask类的函数是一个装饰器,它告诉应用程序哪个URL应该调用相关的函数。 rule 参数表示与该函数绑定的URL。 options 是要转发给底层Rule对象的参数列表。 在上面的例子中, URL