nestat:打印网络连接、路由表、接口统计信息、伪装连接和多播成员,使用最多的是打印网络连接信息

一、常见的参数

-a (all)显示所有选项,默认不显示LISTEN相关
-t (tcp)仅显示tcp相关选项
-u (udp)仅显示udp相关选项
-n 拒绝显示别名,能显示数字的全部转化成数字。
-l 仅列出有在 Listen (监听) 的服務状态

-p 显示建立相关链接的程序名
-r 显示路由信息,路由表
-e 显示扩展信息,例如uid等
-s 按各个协议进行统计
-c 每隔一个固定时间,执行该netstat命令。

 

二、返回字段定义

[root@localhost app]# netstat -anp
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      2717/master
tcp        0      0 10.10.1.132:6379        0.0.0.0:*               LISTEN      9717/redis-server 1
tcp        0      0 0.0.0.0:80              0.0.0.0:*               LISTEN      1874/nginx: master
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1291/sshd
tcp        0      0 10.10.1.132:6379        10.0.20.3:62257         ESTABLISHED 9717/redis-server 1
tcp        0      0 10.10.1.132:6379        10.10.1.113:51015       ESTABLISHED 9717/redis-server 1

Proto:代表协议(tcp、tcp6、udp、udp6)

Recv-Q:数据已经在本地接收缓冲,但是还没有recv()

Send-Q:对方没有收到的数据或者说没有Ack的,还是本地缓冲区

Local Address: 本地IP:本地端口

Foreign Address: 远程IP:远程端口

State:链接状态(监听状态:LISTEN、建立连接状态:ESTABLISHED等)

PID:进程PID号

Program name:程序名字

 

三、常用的netstat命令:

1. 查询进程号所占用的端口号: netstat -anp | grep 进程号

下图中,可以看到监控状态为LISTEN表示已经被占用,最后一列显示被服务redis-server占用,查看具体端口号6379,只要有如图这一行就表示被占用了。

!!此处注意,图中如果显示的是LISTENING并不表示端口被占用,不要和LISTEN混淆哦,查看具体端口时候,必须要看到tcp,端口号,LISTEN那一行,才表示端口被占用

[root@localhost app]# netstat -anp | grep 9717
tcp        0      0 10.10.1.132:6379        0.0.0.0:*               LISTEN      9717/redis-server 1
tcp        0      0 10.10.1.132:6379        10.0.20.3:62257         ESTABLISHED 9717/redis-server 1
tcp        0      0 10.10.1.132:6379        10.10.1.113:51015       ESTABLISHED 9717/redis-server 1
tcp        0      0 10.10.1.132:6379        10.0.20.3:62252         ESTABLISHED 9717/redis-server 1

 

 

 

2. 查看端口号对应的进程,用于排查端口号是否被占用:netstat -tunlp | grep 端口号

-l 表示查找的是监听状态的(listen)的进程,非监听的不会被查询出来

 

[root@localhost app]# netstat -tunlp | grep 8080
tcp6       0      0 :::8080                 :::*                    LISTEN      10841/java

 

 

3. 查看端口号的使用情况:netstat -anp | grep 端口号

 

[root@localhost app]# netstat -anp |grep 8080
tcp6       0      0 :::8080                 :::*                    LISTEN      10841/java
tcp6       0      0 127.0.0.1:8080          127.0.0.1:44093         ESTABLISHED 10841/java
tcp6       0      0 127.0.0.1:44093         127.0.0.1:8080          ESTABLISHED 11061/java

 

4. 显示pid和进程:netstat -pt

[root@localhost ~]# netstat -pt
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 10.10.1.132:6379        10.10.1.114:50267       ESTABLISHED 9717/redis-server 1
tcp        0      0 10.10.1.132:6379        10.0.20.3:60342         ESTABLISHED 9717/redis-server 1
tcp6       0      0 10.10.1.132:ddi-tcp-1   10.0.10.3:55131         ESTABLISHED 9147/java
tcp6       0      0 10.10.1.132:46743       192.168.99.113:mysql    ESTABLISHED 12349/java
tcp6       0      0 10.10.1.132:47033       10.10.1.132:6379        ESTABLISHED 10841/java
tcp6       0      0 10.10.1.132:us-srv      10.10.1.124:34405       FIN_WAIT2   -

 

5. 列出所有处于监听状态的 Sockets:

netstat -l        #只显示监听端口
netstat -lt       #只列出所有监听 tcp 端口
netstat -lu       #只列出所有监听 udp 端口
netstat -lx       #只列出所有监听 UNIX 端口