netstat 输出的本地地址中的 ::: 是什么?

Pra*_*pta 46 networking netstat

这是我得到的 netstat -tulpn 的输出:

tcp        0      0 127.0.0.1:2208              0.0.0.0:*                   LISTEN      2055/hpiod
tcp        0      0 127.0.0.1:631               0.0.0.0:*                   LISTEN      2077/cupsd
tcp        0      0 127.0.0.1:25                0.0.0.0:*                   LISTEN      2138/sendmail: acce
tcp        0      0 127.0.0.1:2207              0.0.0.0:*                   LISTEN      2060/python
tcp        0      0 0.0.0.0:735                 0.0.0.0:*                   LISTEN      1825/rpc.statd
tcp        0      0 :::111                      :::*                        LISTEN      1781/rpcbind
tcp        0      0 :::80                       :::*                        LISTEN      2624/httpd
tcp        0      0 :::22                       :::*                        LISTEN      2096/sshd
udp        0      0 0.0.0.0:32768               0.0.0.0:*                               2398/avahi-daemon:
udp        0      0 0.0.0.0:68                  0.0.0.0:*                               1581/dhclient
udp        0      0 0.0.0.0:729                 0.0.0.0:*                               1825/rpc.statd
udp        0      0 0.0.0.0:732                 0.0.0.0:*                               1825/rpc.statd
udp        0      0 0.0.0.0:5353                0.0.0.0:*                               2398/avahi-daemon:
udp        0      0 0.0.0.0:631                 0.0.0.0:*                               2077/cupsd
udp        0      0 :::32769                    :::*                                    2398/avahi-daemon:
udp        0      0 :::684                      :::*                                    1781/rpcbind
udp        0      0 :::5353                     :::*                                    2398/avahi-daemon:
udp        0      0 :::111                      :::*                                    1781/rpcbind
Run Code Online (Sandbox Code Playgroud)

我很想知道::::本地地址是什么意思?什么是0.0.0.0:*:::*在外国地址?

TOO*_*GAM 33

正如许多其他答案所提到的,:: 代表全零,然后 netstat 可能会在地址后显示一个冒号,因此您会得到三个冒号。

我在这些答案中没有看到的是对关于这真正意味着什么的问题的回答(在这种情况下)。

在 netstat 的情况下,::(在 IPv6 中)或 0.0.0.0(在 IPv4 中)基本上意味着“任何”。
因此,该软件正在侦听任何地址上的 TCP 端口 80(HTTP 端口)。

如果您有多个网卡接口(您会这样做,我稍后会解释),您可以只侦听特定地址。例如,使用某些软件,您可以执行一些操作,例如让 HTTP 服务器侦听使用有线以太网的网卡,但不响应使用无线网络的网卡。如果您这样做了,那么您的计算机可能会执行诸如侦听 IPv4 192.0.2.100:80(或 IPv6 2001:db8:abcd::1234:80)之类的操作。

但是,由于您正在侦听 ":::80",因此您的计算机不会仅在一个传入 IP 地址上侦听端口 80 流量,而是在任何IPv6 地址上侦听端口 80 流量。

你为什么要挑剔你正在收听的界面?嗯,有时我使用此功能的一种方法是让计算机侦听环回接口。(记得我说过你有多个网卡接口......这就是我这么说的原因之一。我猜你有一个真正的物理网络连接,而且你还有一个环回接口。这是最典型的设置现在大多数类型的计算机。)我使用 SSH 隧道来做到这一点。然后我可以做一些事情,比如让本地 VNC 查看器连接到 SSH 隧道的本地端。通过让 SSH 隧道侦听环回接口,我不必担心 SSH 隧道可能侦听来自物理网络接口之一的流量。所以,

在某些情况下,0.0.0.0 或 :: 基本上表示“未指定”地址,如RFC 4291 第 2.5.2 节所指定上面写着“它表示没有地址。” 当软件尝试引用“无效”地址(例如,如果计算机没有分配地址,也许)时,我有时会看到这种情况,其中没有要显示的特定地址。但是,在这种情况下,:: 或 0.0.0.0 指的是“未知”地址。这就是为什么所有 LISTENING 端口都显示为“未知”的原因。对于已建立的连接,您知道远程端是谁,因为您正在与他们通信。对于“聆听”连接,您正在聆听全新的对话。流量可能来自世界任何地方。传入流量可以来自任何地址。并且, nestat 显示的方式是指定一个全为零的地址。由于没有具体的地址可以使用,

最后我会注意到让软件侦听所有网络接口是一件非常普遍的事情。某些软件可以配置为仅侦听特定的 Internet 地址,或者可能是特定的网卡。这可能会更安全一些,因为这样软件就不会在预期没有有效流量的地方进行侦听。这可能会限制攻击能力。但是,很多软件都没有这样的选项,或者这样的选项有些被掩埋/隐藏了。所以,监听所有网卡并不是一件超级可怕的事情。这是很常见的。而且,如果您想阻止软件接收特定网络端口上的流量,还有其他方法可以实现这一点,包括使用防火墙阻止不需要的流量。如果这样做,防火墙可能会阻止流量,但(网络)服务器可能仍会侦听该网络接口上的流量。在这种情况下,服务器永远不会在该接口上获得流量,但 netstat 仍会报告服务器正在侦听(对于永远不会到达该服务器的流量)。看到 netstat 报告服务器软件正在监听所有接口是很常见的,所以这不是特别值得警惕的事情。

最后,我会提到这个问题和这个答案不是 Linux 特有的。(我提到这一点是因为我确实在这个问题上看到了“Linux”标签。)显示的命令行参数和显示的示例输出可能来自 Linux,不同的操作系统可能会显示略有不同的内容。但是,关于 :: 和 0.0.0.0 的主题,netstat 在这方面的工作方式在运行 BSD 或 Microsoft Windows(可能还有许多其他系统)的机器上是相同的。


Cir*_*郝海东 8

正如其他人所说,这是这种上下文的自然 IPv6 表示法。

下面我们来引用和解读一下相关标准:

:::* == 0000.0000.0000.0000.0000.0000.0000.0000:*

http://tools.ietf.org/html/rfc5952#section-4规范(不仅仅是可能的速记)IPv6 地址是:

  • 以十六进制写成,字符a-f小写。
  • 每 2 个字节分组 :
  • 必须删除前导 0 。0000变成0.
  • 的最长序列:0:0:0: 必须转换为::. 只能做一次,否则会导致歧义。

所以:::*意思是:

  • 0000:0000:0000:0000:0000:0000:0000在任何端口 ( :*)
  • == 0:0:0:0:0:0:0(尾随 0 移除)
  • == ::(连续零收缩)

0000.0000.0000.0000.0000.0000.0000.0000:* == 未指定地址

http://tools.ietf.org/html/rfc4291#section-2.5.2定义了“未指定地址”:

地址 0:0:0:0:0:0:0:0 称为未指定地址。它绝不能分配给任何节点。它表示没有地址。它的一个使用示例是在初始化主机在获知自己的地址之前发送的任何 IPv6 数据包的源地址字段中。

未指定的地址不得用作 IPv6 数据包或 IPv6 路由标头的目标地址。IPv6 路由器绝不能转发源地址为未指定的 IPv6 数据包。

这使它成为像这种情况下 N/A 列的不错选择。

那么::不是 localhost,这同样的文件说是::1

netstat1.60,读取输出协议tcp6udp6IPv6的,这显示出更好的正在发生的事情,例如:

tcp6       0      0 :::22                   :::*                    LISTEN      1201/sshd
udp6       0      0 :::5353                 :::*                                1449/avahi-daemon:
Run Code Online (Sandbox Code Playgroud)

也可以看看:


Jas*_*son 0

:::* 将是您的 localhost/loop back in IPv6 :)

基本上,您有服务在本地侦听并连接到服务。