netstat -anpl | grep 192.168.29.130
问1:
显示以下信息是什么含义?
(Not all processes could be identified, non-owned process info will not be shown, you would have to be root to see it all.) tcp 0 0 192.168.29.130:22 192.168.29.1:60986 ESTABLISHED - tcp 0 0 192.168.29.130:22 192.168.29.1:61016 ESTABLISHED - tcp 0 48 192.168.29.130:22 192.168.29.1:60978 ESTABLISHED - tcp 0 0 ::ffff:192.168.29.130:1521 ::ffff:192.168.29.130:50471 ESTABLISHED - tcp 0 0 ::ffff:192.168.29.130:50475 ::ffff:192.168.29.130:1521 ESTABLISHED 12530/java
答1:
这个命令用于查看与 IP 地址 192.168.29.130
相关的网络连接信息
-a
选项表示显示所有活动的网络连接和监听的服务器套接字;-n
选项表示以数字形式显示地址和端口号,不进行 DNS 解析;-p
选项表示显示与每个套接字关联的进程 ID 和名称;-l
选项通常用于显示监听套接字,但在这里由于被 grep
过滤了,所以实际上不会显示监听套接字
- (Not all processes could be identified, non-owned process info will not be shown, you would have to be root to see it all.)
这个信息表示,由于当前用户不是 root 用户,所以不是所有进程都能被识别出来。只有当前用户拥有的进程才会显示进程信息(如进程 ID 和进程名)。 - tcp 0 0 192.168.29.130:22 192.168.29.1:60986 ESTABLISHED -
这条记录表示一个 TCP 连接,其中192.168.29.130
上的 22 端口(通常是 SSH 服务的端口)与192.168.29.1
上的 60986 端口处于 ESTABLISHED(已建立)状态。由于是非 root 用户执行的命令,所以没有显示与该连接关联的进程信息。 - ...
其他记录与第2条类似,只是端口号和连接状态可能不同。 - tcp 0 0 ::ffff:192.168.29.130:1521 ::ffff:192.168.29.130:50471 ESTABLISHED -
这条记录表示一个 TCP 连接,使用了 IPv6 映射的 IPv4 地址(::ffff:
前缀)。它表示192.168.29.130
上的 1521 端口(可能是 Oracle 数据库服务的默认端口)与同一台机器上的 50471 端口处于 ESTABLISHED 状态。 - tcp 0 0 ::ffff:192.168.29.130:50475 ::ffff:192.168.29.130:1521 ESTABLISHED 12530/java
这条记录与上一条类似,但是显示了与该连接关联的进程信息。进程 ID 是 12530,进程名是 java。这表示一个 Java 进程正在监听或使用了192.168.29.130
上的 50475 端口,并与同一台机器上的 1521 端口建立了连接。
netstat -anp | grep 9803
(Not all processes could be identified, non-owned process info will not be shown, you would have to be root to see it all.) tcp 0 0 :::9803 :::* LISTEN 12530/java
问2:
为什么9803服务是部署在192.168.29.130服务器上的,但是netstat -anpl | grep 192.168.29.130 却不显示netstat -anp | grep 9803显示的结果呢:
tcp 0 0 :::9803 :::* LISTEN 12530/java
答2:
原因可能是这个监听套接字并没有绑定到特定的 IP 地址 192.168.29.130
,而是绑定到了所有可用的 IP 地址(包括 IPv6 的 ::
和 IPv4 的 0.0.0.0
)。在 netstat
的输出中,:::9803
表示该套接字正在监听所有可用的 IPv6 地址和端口 9803
,而不是特定的 IP 地址 192.168.29.130
。
如果你想要查看 192.168.29.130
这个 IP 地址上是否有进程在监听端口 9803
,但实际上由于端口 9803
是在所有地址上监听的,所以 grep 192.168.29.130
不会返回这条信息。但是,由于 192.168.29.130
是机器上的一个有效 IP 地址,并且端口 9803
正在监听所有地址,因此从这个 IP 地址也可以访问到该端口
问3:
怎么知道并且端口 9803 正在监听所有地址?
答3:
要确定端口 9803 是否正在监听所有地址(即绑定到 0.0.0.0
对于 IPv4 或 ::
对于 IPv6),你可以从 netstat
的输出中直接观察。当端口绑定到所有地址时,netstat
会显示 0.0.0.0
(对于 IPv4)或 ::
(对于 IPv6)作为本地地址。
以下是如何通过 netstat
命令来确定端口 9803 是否正在监听所有地址的步骤:
- 运行
netstat
命令并过滤出端口 9803 的信息。你可以使用grep
来过滤输出。
对于 IPv4:
netstat -tulnp | grep 9803 |
对于 IPv6:
netstat -tulnp6 | grep 9803 |
注意:-t
表示 TCP,-u
表示 UDP(如果你不确定是 TCP 还是 UDP,可以省略 -t
或 -u
),-l
表示仅列出监听状态的套接字,-n
表示以数字形式显示地址和端口号(不进行 DNS 解析),-p
表示显示与套接字关联的进程信息。
- 观察输出中的本地地址(Local Address)列。如果看到
0.0.0.0:9803
(对于 IPv4)或:::9803
(对于 IPv6),那么端口 9803 正在监听所有地址。
如果你只运行了 netstat -anp | grep 9803
而没有指定 -l
选项,你可能会看到与端口 9803 相关的所有连接,包括已建立的连接和监听状态的套接字。但是,要特别关注那些状态为 LISTEN
的行,因为它们表示套接字正在监听连接请求。
如果你看到类似这样的输出:
tcp 0 0 0.0.0.0:9803 0.0.0.0:* LISTEN 12530/java |
或者
tcp6 0 0 :::9803 :::* LISTEN 12530/java |
那么端口 9803 正在监听所有地址。