«

linux环境下使用netstat命令查看网络信息

时间:2023-10-10 09:57     作者:Anglei     分类: Linux


这个命令很强大,但是我经常使用的参数很简单,通常用来查询端口占用问题,命令为 netstat -anp | grep xxxPORT,因为在我测试自己项目程序的时候,总有一些进程企图占用我使用的端口,比如那个 被我 kill 了 n 次的 TIM 客户端,使用 netstat 可以方便的找到是哪个进程占用了你的端口。

虽然这个命令经常使用,但是其中的这些参数含义却不是很清楚,所以特地总结一下,综合其他常见的用法,记录下来以备后续查找使用。

参数选项
-a:显示所有连接,包括 LISTEN 状态的连接
-l:仅显示 LISTEN 状态的连接
-t:仅显示tcp相关选项
-u:仅显示udp相关选项
-n:拒绝显示别名,能显示数字的全部转化成数字
-o:显示信息中包括与网络计时器相关的信息
-e:显示扩展信息,例如uid等
-p:显示建立相关链接的程序名
-r:显示路由信息,路由表
-s:按各个协议进行统计
-c:每隔一个固定时间,执行该netstat命令。
————————————————

无参数执行
该命令无参数执行时显示数据会少一些,便于我们看清命令执行的结果,内容如下:

[root@node1 ~]# netstat
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 192.168.0.201:ssh       178.129.126.124.b:19450 ESTABLISHED
tcp        0     52 192.168.0.201:ssh       178.129.126.124.b:17626 ESTABLISHED
tcp        0      0 192.168.0.201:57784     101.200.35.175:https    TIME_WAIT
tcp        0      0 192.168.0.201:42298     100.125.2.72:https      ESTABLISHED
Active UNIX domain sockets (w/o servers)
Proto RefCnt Flags       Type       State         I-Node   Path
unix  2      [ ]         DGRAM                    11550    /run/systemd/shutdownd
unix  2      [ ]         DGRAM                    13355412 /var/run/chrony/chronyd.sock
unix  3      [ ]         DGRAM                    1228     /run/systemd/notify
unix  2      [ ]         DGRAM                    1230     /run/systemd/cgroups-agent

输出结果可以分为 Active Internet connections 和 Active UNIX domain sockets 两个部分:

Active Internet connections 指有效的网络连接,默认显示6列内容:

Proto:协议名字,包括tcp, udp, udpl, raw等
Recv-Q:表示网络接收队列,表示收到的数据已经在本地接收缓冲,还有多少没有被应用程序取走
Send-Q:表示网络发送队列,表示存在本地缓冲区,但对方没有收到的数据或者没有 ACK 的
Local Address:本地IP地址和端口
Foreign Address:外部IP地址和端口
State:网络连接状态,包括 ESTABLISHED、SYN_SENT、SYN_RECV、FIN_WAIT1、FIN_WAIT2、TIME_WAIT、CLOSE、CLOSE_WAIT、LAST_ACK、LISTEN、CLOSING、UNKNOWN 等状态

常用命令组合

查询端口占用

[root@node1 /]# netstat -anp | grep 8889
tcp        0      0 0.0.0.0:8889            0.0.0.0:*               LISTEN      27584/tinyproxy

这是我目前最常用的命令,在windows可以改为 netstat -ano | findstr 8889

显示tcp连接

[root@node1 /]# netstat -at
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 0.0.0.0:ddi-tcp-2       0.0.0.0:*               LISTEN
tcp        0      0 localhost:smtp          0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:ssh             0.0.0.0:*               LISTEN
tcp        0     52 192.168.0.201:ssh       178.129.126.124.b:19450 ESTABLISHED
tcp        0      0 192.168.0.201:ssh       178.129.126.124.b:17626 ESTABLISHED
tcp        0      0 192.168.0.201:42298     100.125.2.72:https      ESTABLISHED
tcp6       0      0 [::]:squid              [::]:*                  LISTEN
tcp6       0      0 localhost:smtp          [::]:*                  LISTEN
tcp6       0      0 [::]:ssh                [::]:*                  LISTEN

显示处于 LISTEN 状态的端口

[root@node1 /]# netstat -l
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 0.0.0.0:ddi-tcp-2       0.0.0.0:*               LISTEN
tcp        0      0 localhost:smtp          0.0.0.0:*               LISTEN
tcp        0      0 0.0.0.0:ssh             0.0.0.0:*               LISTEN
tcp6       0      0 [::]:squid              [::]:*                  LISTEN
tcp6       0      0 localhost:smtp          [::]:*                  LISTEN
tcp6       0      0 [::]:ssh                [::]:*                  LISTEN
udp        0      0 0.0.0.0:bootpc          0.0.0.0:*
udp        0      0 0.0.0.0:ntp             0.0.0.0:*
udp        0      0 localhost:323           0.0.0.0:*
udp        0      0 0.0.0.0:56034           0.0.0.0:*
udp6       0      0 [::]:42035              [::]:*
udp6       0      0 localhost:323           [::]:*
Active UNIX domain sockets (only servers)
Proto RefCnt Flags       Type       State         I-Node   Path
unix  2      [ ACC ]     STREAM     LISTENING     11533    /run/lvm/lvmpolld.socket
unix  2      [ ACC ]     STREAM     LISTENING     6848304  /var/run/rpcbind.sock
unix  2      [ ACC ]     STREAM     LISTENING     11584    /run/lvm/lvmetad.socket

每秒显示一次信息

[root@node1 /]# netstat -c
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0     52 192.168.0.201:ssh       178.129.126.124.b:19450 ESTABLISHED
tcp        0      0 192.168.0.201:ssh       178.129.126.124.b:17626 ESTABLISHED
tcp        0      0 192.168.0.201:42298     100.125.2.72:https      ESTABLISHED
Active UNIX domain sockets (w/o servers)
Proto RefCnt Flags       Type       State         I-Node   Path
unix  2      [ ]         DGRAM                    11550    /run/systemd/shutdownd

显示核心路由信息

[root@node1 /]# netstat -r
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
default         192.168.0.1     0.0.0.0         UG        0 0          0 eth0
169.254.169.254 192.168.0.254   255.255.255.255 UGH       0 0          0 eth0
172.17.0.0      0.0.0.0         255.255.0.0     U         0 0          0 docker0
192.168.0.0     0.0.0.0         255.255.255.0   U         0 0          0 eth0

总结
netstat -anp | grep 8889 命令可用于查询8889端口被哪个进程占用了,在Windows上翻译为 netstat -ano | findstr 8889
netstat 命令查询出的网络连接信息中,Recv-Q 和 Send-Q 通常应该为0,如果长时间不为0可能是有问题的,需要尽快排查
如果 Recv-Q 数值一直处于不为0的状态,可能是遭受了拒绝服务 DOS 攻击,导致本地消息处理过慢
如果 Send-Q 数值一直处于不为0的状态,可能是有应用向外发送数据包过快,或者是对方接收处理数据包不够快

本文完结,相关标签: netstat

 版权所有:Anglei
 文章标题:linux环境下使用netstat命令查看网络信息
 除非注明,本站文章如未特殊说明均为 MAXADA社区知识库 原创,且版权所有,请勿用于任何商业用途。

推荐阅读:

看完后感想如何?

路过(0)

雷人(0)

握手(0)

鲜花(0)

鸡蛋(0)
分享到: