netstat -a 命令列出类似 :::30179、:::www 的信息

netstat -a 命令列出类似 :::30179、:::www 的信息

netstat -a命令列出的信息如下:

tcp        0      0 :::30179                :::*           LISTEN      
tcp        0      0 :::www                  :::*           LISTEN      
tcp        0      0 :::10001                :::*           LISTEN      
tcp        0      0 :::telnet               :::*           LISTEN   

这是什么意思?我试图找出答案,但找不到。

答案1

这些套接字正在监听 IPv6 未指定的地址,即::。这是 的缩写0000:0000:0000:0000:0000:0000:0000:0000(多个 0 块可能被压缩成::,请参阅RFC 5952)。这类似于 IPv4 未指定地址0.0.0.0。这意味着服务正在监听主机的所有地址。

通常,监听 IPv6 套接字意味着该套接字仅接受来自 IPv6 客户端的传入连接,并且软件需要打开第二个套接字来监听 IPv4 客户端。

但是有一种特殊情况:监听 IPv6 未指定的地址并将标志IPV6_V6ONLY设置为 0(false)。在许多系统(包括 Linux)上,这是默认设置。在这种情况下,套接字将在单个套接字上同时接受 IPv4 和 IPv6 客户端。此功能使软件开发人员更容易支持 IPv6:他们可以编写仅使用单个套接字监听两种协议的软件。

这样做的缺点是,很难看出哪些套接字监听两种协议,哪些套接字只监听 IPv6。IPv6:地址中使用的 也容易让人混淆,并且 也是地址和端口之间的分隔符。这样你就得到了令人困惑的:::部分。

基于 BSD 的系统倾向于以不同的方式显示相同的信息。您的示例将显示为例如:

tcp46      0      0  *.30179              *.*               LISTEN
tcp46      0      0  *.www                *.*               LISTEN
tcp46      0      0  *.10001              *.*               LISTEN
tcp46      0      0  *.telnet             *.*               LISTEN

对 IPv4 和 IPv6 使用两个独立套接字的服务器显示如下:

tcp4       0      0  *.ssh                *.*               LISTEN
tcp6       0      0  *.ssh                *.*               LISTEN

udp4       0      0  *.ntp                *.*
udp6       0      0  *.ntp                *.*

我个人喜欢它明确显示正在监听哪些协议(即tcp4// tcp6tcp46并使用*未指定地址的字符。

我刚刚注意到最近的 Ubuntu 版本使用这种符号:

tcp        0      0 *:ssh                 *:*               LISTEN
tcp6       0      0 [::]:ssh              [::]:*            LISTEN
tcp6       0      0 [::]:https            [::]:*            LISTEN

这已经清楚多了。遗憾的是,它没有显示仅侦听 IPv6 的套接字(如套接字ssh)与侦听 IPv4 和 IPv6 的套接字(如套接字https)之间的区别。

相关内容