加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Linux > 正文

linux netstat命令:网络状态查看命令

发布时间:2020-12-14 02:17:18 所属栏目:Linux 来源:网络整理
导读:我们需要先简单了解一下端口的作用。在互联网中,如果 IP 地址是 IP 服务器在互联网中唯一的地址标识,那么大家可以想象一下:我有一台服务器,它有固定的公网 IP 地址,通过 IP 地址可以找到我的服务器。但是我的服务器中既启动了网页服务(Web 服务),又启
我们需要先简单了解一下端口的作用。在互联网中,如果 IP 地址是 IP 服务器在互联网中唯一的地址标识,那么大家可以想象一下:我有一台服务器,它有固定的公网 IP 地址,通过 IP 地址可以找到我的服务器。但是我的服务器中既启动了网页服务(Web 服务),又启动了文件传输服务(FTP 服务),那么你的客户端访问我的服务器,到底应该如何确定你访问的是哪一个服务呢?

端口就是用于网络通信的接口,是数据从传输层向上传递到应用层的数据通道。我们可以理解为每个常规服务都有默认的端口号,通过不同的端口号,我们就可以确定不同的服务。也就是说,客户端通过 IP 地址访问到我的服务器,如果数据包访问的是 80 端口,则访问的是 Web 服务;而如果数据包访问的是 21 端口,则访问的是 FTP 服务。

我们可以简单地理解为每个常规服务都有一个默认端口(默认端口可以修改),这个端口是所有人都知道的,客户端可以通过固定的端口访问指定的服务。而我们通过在服务器中查看已经开启的端口号,就可以判断服务器中开启了那些服务。

netstat 是网络状态查看命令,既可以查看到本机开启的端口,也可以查看有哪些客户端连接。netstat 命令的基本信息如下。
  • 命令名称:netstat。
  • 英文原意:Print network connections,routing tables,interface statistics,masquerade connections,and multicast memberships。
  • 所在路径:/bin/netstat.
  • 执行权限:所有用户。
  • 功能描述:输出网络连接、路由表、接口统计、伪装连接和组播成员。

命令格式如下:

[root@localhost ~]# netstat [选项]

选项:
  • -a:列出所有网络状态,包括 Socket 程序;
  • -c秒数:指定每隔几秒刷新一次网络状态;
  • -n:使用 IP 地址和端口号显示,不使用域名与服务名;
  • -p:显示 PID 和程序名;
  • -t:显示使用 TCP 协议端口的连接状况;
  • -u:显示使用 UDP 协议端口的连接状况;
  • -I:仅显示监听状态的连接;
  • -r:显示路由表;

【例 1】查看本机开启的端口。
这是本机最常用的方式,使用选项"-tuln"。因为使用了"-I"选项,所以只能看到监听状态的连接,而不能看到已经连接状态的连接。例如:

[root@localhost ~]# netstat -tuln
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp? 0? 0 0.0.0.0:3306? 0.0.0.0:* LISTEN
tcp? 0? 0 0.0.0.0:11211 0.0.0.0:* LISTEN
tcp? 0? 0 0.0.0.0:22 0.0.0.0:* LISTEN
tcp? 0? 0:::11211 :::* LISTEN
tcp? 0? 0 :::80 :::* LISTEN
tcp? 0?? 0 :::22 :::* LISTEN
udp? 0?? 0 0.0.0.0:11211 0.0.0.0:*
udp? 0?? 0:::11211 :::*
#协议接收队列发送队列本机的 IP 地址及端口号 远程主机的 IP 地址及端口号 状态

这个命令的输出较多。
1) Proto:网络连接的协议,一般就是 TCP 协议或者 UDP 协议。
2) Recv-Q:表示接收到的数据,已经在本地的缓冲中,但是还没有被进程取走。
3) Send-Q:表示从本机发送,对方还没有收到的数据,依然在本地的缓冲中,不具备 ACK 标志的数据包。
4) Local Address:本机的 IP 地址和端口号。
5) ForeignAddress:远程主机的 IP 地址和端口号。
6) State:状态。常见的状态主要有以下几种。
  • -LISTEN:监听状态,只有 TCP 协议需要监听,而 UDP 协议不需要监听。
  • -ESTABLISHED:已经建立连接的状态。如果使用"-I"选项,则看不到已经建立连接的状态。
  • -SYN_SENT:SYN 发起包,就是主动发起连接的数据包。
  • -SYN_RECV:接收到主动连接的数据包。
  • -FIN_WAIT1:正在中断的连接。
  • -FIN_WAIT2:已经中断的连接,但是正在等待对方主机进行确认。
  • -TIME_WAIT:连接已经中断,但是套接字依然在网络中等待结束。
  • -CLOSED:套接字没有被使用。

在这些状态中,我们最常用的就是 LISTEN 和 ESTABLISHED 状态,一种代表正在监听,另一种代表已经连接。

【例 2】查看本机有哪些程序开启的端口。
如果使用"-p"选项,则可以查看到是哪个程序占用了端口,并且可以知道这个程序的 PID。例如:

[root@localhost ~]# netstat -tulnp
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address? Foreign Address State PID/Program name
tcp? 0? 0 0.0.0.0:3306? 0.0.0.0:* LISTEN 2359/mysqld
tcp? 0? 0 0.0.0.0:11211? 0.0.0.0:* LISTEN 1563/memcached
tcp? 0? 0 0.0.0.0:22? 0.0.0.0:* LISTEN 1490/sshd
tcp? 0? 0 :::11211 :::* LISTEN 1563/memcached
tcp? 0? 0 :::80 :::* LISTEN 21025/httpd
tcp? 0? 0 :::22 :::*
LISTEN 1490/sshd
udp? 0? 0 0.0.0.0:11211? 0.0.0.0:* 1563/memcached
udp? 0? 0:::11211 :::* 1563/memcached
#比之前的命令多了一个"-p"选项,结果多了可以知道是哪个程序占用了端口


【例 3】 查看所有连接。
使用选项"-an"可以查看所有连接,包括监听状态的连接(LISTEN)、已经建立连接状态的连接(ESTABLISHED)、Socke 程序连接等。因为连接较多,所以输出的内容有很多。例如:

[root@localhost ~]# netstat -an
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address? Foreign Address? State
tcp? 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN
tcp? 0 0 0.0.0.0:11211 0.0.0.0:* LISTEN
tcp? 0 0 117.79.130.170:80 78.46.174.55:58815 SYN_RECV
tcp? 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
tcp? 0 0 117.79.130.170:22 124.205.129.99:10379 ESTABLISHED
tcp? 0 0 117.79.130.170:22 124.205.129.99:11811 ESTABLISHED
...省略部分内容...
udp? 0? 0 0.0.0.0:11211 0.0.0.0:*
udp? 0 0:::11211 :::*
Active UNIX domain sockets (servers and established)
Proto RefCnt Flags Type State I-Node Path
unix? 2? [ACC]? STREAM? LISTENING? 9761? @/var/run/hald/dbus-fr41WkQn1C
…省略部分内容...

从"Active UNIX domain sockets"开始,之后的内容就是 Socke 程序产生的连接,之前的内容都是网络服务产生的连接。我们可以在"-an"选项的输出中看到各种网络连接状态,而之前的"-tuln"选项则只能看到监听状态。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读