地址 0.0.0.0、[::] 和 * 之间有什么区别?

地址 0.0.0.0、[::] 和 * 之间有什么区别?

如果你运行类似ss -tunlp(或netstat -tunlp)的程序,你会得到一个监听端口的列表。

标准格式应为<host>:<port>,例如127.0.0.3:5000

但是您还会看到0.0.0.0:<port>[::]:<port>。这两个是什么意思?

具体来说,如果您看到[::]:220.0.0.0:22*:22,是否意味着任何人都可以 ssh 进入该机器?

答案1

0.0.0.0:<port>是 IPv4,[::]:<port>是 IPv6,方括号是将地址和端口分开。当它们列在 下时Local Address,表示特定进程正在监听所有本地地址。*:<port>表示任何地址,包括 IPv4 和 IPv6(感谢@raj 指出我忽略了标题中的问题并在评论中完成答案)。

现在,监听所有接口/地址并不意味着每个人都可以连接到您的机器。例如,如果它是您的 PC,它可能被路由器屏蔽了,与可怕的世界隔绝。此外,任何防火墙/iptables 都会决定哪些数据包将被接受,哪些数据包将被丢弃。

倾听和被联系到是两码事。

编辑:关于 @QianChen 的评论,这[::]意味着 IPv4 连接也被接受,可以使用 进行简单测试nc。根据 的版本nc,您可以指定它是否应使用 IPv4、IPv6 或两者。运行nc -kl6 :: 8080,(my)nc将创建一个同时接受 IPv4 和 IPv6 的套接字:

tcp   LISTEN 0       1                    *:8080               *:*     users:(("nc",pid=317808,fd=3))
$ nc -4 localhost -zv
Connection to localhost 8080 port [tcp/http-alt] succeeded!

但是,设置net.ipv6.bindv6only为 1 ( sysctl -w net.ipv6.bindv6only=1,nc -kl6 :: 8080将仅接受 IPv6:

tcp LISTEN 0 1 [::]:8080 [::]:* users:(("nc",pid=318444,fd=3))

我们得到

$ nc -4 localhost 8080 -zv
nc: connect to localhost port 8080 (tcp) failed: Connection refused
nc: connect to localhost port 8080 (tcp) failed: Connection refused

$ nc -6 localhost 8080 -zv
Connection to localhost 8080 port [tcp/http-alt] succeeded!

相关内容