如果你运行类似ss -tunlp
(或netstat -tunlp
)的程序,你会得到一个监听端口的列表。
标准格式应为<host>:<port>
,例如127.0.0.3:5000
。
但是您还会看到0.0.0.0:<port>
和[::]:<port>
。这两个是什么意思?
具体来说,如果您看到[::]:22
或0.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!