linux – 双栈 *** 作系统中::和0.0.0.0的语义

linux – 双栈 *** 作系统中::和0.0.0.0的语义,第1张

概述回到仅限IPv4的日子,在netstat中显示为在0.0.0.0上侦听的LISTEN连接将响应系统中任何IPv4接口上的连接. 据我了解,新的IPv6 idiom ::侦听所有可用的IPv6和IPv4接口.对于所有 *** 作系统(Unix,Windows,Mac),这是否正确?是否有成语可以只监听IPv6接口? 不幸的是,这取决于您使用的 *** 作系统. 在Microsoft Windows上,将套接字绑定到 回到仅限IPv4的日子,在netstat中显示为在0.0.0.0上侦听的ListEN连接将响应系统中任何IPv4接口上的连接.

据我了解,新的IPv6 idiom ::侦听所有可用的IPv6和IPv4接口.对于所有 *** 作系统(Unix,Windows,Mac),这是否正确?是否有成语可以只监听IPv6接口?

解决方法 不幸的是,这取决于您使用的 *** 作系统.

在Microsoft windows上,将套接字绑定到::仅绑定到IPv6端口.因此,要监听IPv4和IPv6上的所有地址,您需要绑定到0.0.0.0以及::.以下摘录来自Vista框:

C:\>netstat -an | find "445"  TCP    0.0.0.0:445            0.0.0.0:0              ListENING  TCP    [::]:445               [::]:0                 ListENING

我给出的示例是端口445,用于不使用NetBIOS时的SMB流量.正如您所看到的,它分别绑定到0.0.0.0和:: to make,IPv4和IPv6客户端都可以工作.

在linux上,::包含与IPv4兼容的地址,正如您已经正确猜到的那样,因此也不需要绑定到0.0.0.0.我写了一个简单的Python程序,它只绑定到::上的AF_INET6套接字.即使我没有绑定到AF_INET(IPv4)套接字,它仍然接受来自IPv4客户端的连接.例如,如果10.1.1.3连接到它,它将显示为连接:: ffff:10.1.1.3.

除了它变得毛茸茸.如果/ proc / sys / net / ipv6 / bindv6only设置为1,则上述内容不适用于linux,在这种情况下,行为与windows完全相同 – 绑定到::只会侦听IPv6请求.如果您也想要侦听IPv4请求,则需要创建一个AF_INET套接字并监听0.0.0.0.幸运的是,bindv6only的默认值为0,所以你必须处理这个问题的可能性非常小(除非你使用Debian,实际默认为bindv6only = 1).

在检查服务是否支持IPv6以及是否支持IPv4时,所有这一切都很方便.这是我的SSH服务器:

$netstat -64ln | grep 22tcp6    0    0 :::22    :::*    ListEN

正如您所看到的,SSH仅侦听::端口22.但是,它不只是侦听IPv6客户端 – 由于IPv4兼容绑定,它可以在IPv4客户端中正常工作.为了证明这一点,如果你看一下:

$cat /proc/sys/net/ipv6/bindv6only 0

bindv6only被禁用(默认值).如果将其设置为1,那么我将不得不鼓励SSH同时收听0.0.0.0(或者代之以).

抱歉没有关于Mac OS X方面的信息.我过去曾经使用它,但我更喜欢GNOME的美学,所以我很长时间没有使用它.但是,我猜这个行为与linux的行为相同.

希望这可以帮助.

总结

以上是内存溢出为你收集整理的linux – 双栈 *** 作系统中::和0.0.0.0的语义全部内容,希望文章能够帮你解决linux – 双栈 *** 作系统中::和0.0.0.0的语义所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/1043879.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-24
下一篇 2022-05-24

发表评论

登录后才能评论

评论列表(0条)

保存