我有一个 ipv4 服务器,它只接受本地主机上的连接(使用INADDR_LOOPBACK
)。我想将此服务器转换为双栈 ipv6/ipv4。然而,使用in6addr_loopback
只接受连接到::1
.
我发现我可以同时接受 ipv4 和 ipv6 连接in6addr_any
,但由于这也允许从任何地方进行连接,因此对于我的特定情况没有用处。
是否可以绑定到 ipv6 localhost(::1
)和 ipv4 本地主机(127.0.0.1
) 同时地?
AFAIK,那是不可能的。
您需要做的是创建两个套接字,一个绑定到 INADDR_LOOPBACK,另一个绑定到 in6addr_loopback。然后,您可以使用您选择的多路复用器(poll、select、epoll 等)同时等待它们。
Update
只是想出了一些您可能需要考虑的解决方法。在这两种解决方法中,您都绑定到in6addr_any
.
- 建立连接后,检查远程地址,如果不是 127.0.0.1 或 ::1,则将其关闭。虽然 IP 地址上的连接行为并不理想(连接被建立/立即关闭而不是被拒绝),但最好的是这可以完全在您的应用程序中完成。
- 调整操作系统 IP 堆栈的设置,以拒绝从非环回 IP 到您的端口的连接。这在 Linux 上绝对可行iptables http://en.wikipedia.org/wiki/Iptables。虽然行为更理想,但它需要应用程序外部的配置。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)