【操作系统之九】Linux常用命令之netstat

一、概念
netstat命令用于显示与IP、TCP、UDP和ICMP协议相关的统计数据,一般用于检验本机各端口的网络连接情况。netstat是在内核中访问网络及相关信息的程序,它能提供TCP连接,TCP和UDP监听,进程内存管理的相关报告。

二、命令格式
1、直接输入 netstat命令

[root@PCS101 logs]# netstat
Active Internet connections (w/o servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0     52 PCS101:ssh              bdeadc-80-196.ptr:55405 ESTABLISHED
Active UNIX domain sockets (w/o servers)
Proto RefCnt Flags       Type       State         I-Node   Path
unix  2      [ ]         DGRAM                    14342    /run/systemd/notify
unix  2      [ ]         DGRAM                    14344    /run/systemd/cgroups-agent
unix  5      [ ]         DGRAM                    14365    /run/systemd/journal/socket
......

 

(1)Active Internet connections,活动的Internet网络连接(TCP,UDP,raw)
Proto 连接使用的协议
Recv-Q 接收队列:连接此套接字的用户程序未拷贝的字节数
Send-Q 发送队列:远程主机未确认的字节数
Local Address 套接字的本地地址(本地主机名)和端口号。除非给定-n,--numeric选项,否则套接字地址按标准主机名(FQDN)进行解析,而端口到则转换到相应的服务名。
Foreign Address 套接字的远程地址(远程主机名)和端口号。
State 套接字的状态。因为在RAW协议中没有状态,而且UDP也不用状态信息,所以此行留空。通常为以下几个值之一:
  ESTABLISHED 套接字有一个有效连接
  SYN_SENT 套接字尝试建立一个连接
  SYN_RECV 从网络上收到一个连接请求
  FIN_WAIT1 套接字已关闭,连接正在断开
  FIN_WAIT2 连接已关闭,套接字等待远程方中止。
    TIME_WAIT 在关闭之后,套接字等待处理仍然在网络中的分组
    CLOSED 套接字未用
    CLOSE_WAIT 远程方已关闭,等待套接字关闭
    LAST_ACK 远程方中止,套接字已关闭。等待确认
    LISTEN 套接字监听进来的连接。如果不设置—listening(-l)或者—all(-a)选项,将不显示出来这些连接。
    CLOSING 套接字都已关闭,而还未把所有输出发出
    UNKNOWN 套接字状态未知

(2)Active UNIX domain sockets,称为有源Unix域套接口(和网络套接字一样,但是只能用于本机通信,性能可以提高一倍)。
Proto 连接使用的协议
RefCnt 表示连接到本套接口上的进程数量
Flags 显示的标志为SO_ACCEPTON(显示为ACC),SO_WAITDATA(W)或SO_NOSPACE(N)。如果相应的进程等待一个连接请求,那么SO_ACCECPTON用于未连接的套接字。其他标志通常并不重要
Type 显示套接口的类型
  SOCK_DGRAM 此套接字用于数据报(无连接)模式
  SOCK_STREAM 流模式(连接)套接字
  SOCK_RAW 此套接字用于RAW模式
  SOCK_RDM 一种服务可靠性传递信息
  SOCK_SEQPACKET 连续分组套接字
  SOCK_PACKET RAW接口使用套接字
   UNKNOWN 未知
State 套接口当前的状态
  FREE 套接字未分配
  LISTENING 套接字正在监听一个连接请求。除非设置--listening(-l)或者--all(-a)选项,否则不显示。
  CONNECTING 套接字正要建立连接
  CONNECTED套接字已连接
  DISCONNECTING 套接字已断开
  (empty) 套接字未连。
  UNKNOWN !不应当出现这种状态
I-Node
Path 连接到套接口的其它进程使用的路径名

2、常见参数

-a (all)显示所有选项,netstat默认不显示LISTEN相关
-t (tcp)仅显示tcp相关选项
-u (udp)仅显示udp相关选项
-n 拒绝显示别名,能显示数字的全部转化成数字。(重要)
-l 仅列出有在 Listen (监听) 的服务状态
-i 显示网卡列表
-p 显示建立相关链接的程序名(macOS中表示协议 -p protocol)
-r 显示路由信息,路由表
-e 显示扩展信息,例如uid等
-s 按各个协议进行统计 (重要)
-c 每隔一个固定时间,执行该netstat命令。
-o 显示计时器
-g 显示组播组的关系

(1)列出所有端口 (包括监听和未监听的)

列出所有端口: netstat -a
列出所有tcp端口: netstat -at
列出所有udp端口: netstat -au

(2)列出所有处于监听状态的 Sockets
只显示监听端口: netstat -l
只列出所有监听tcp端口: netstat -lt
只列出所有监听udp端口: netstat -lu
只列出所有监听UNIX端口: netstat -lx

(3)显示每个协议的统计信息
显示所有端口的统计信息 netstat -s
显示TCP端口的统计信息 netstat -st
显示UDP端口的统计信息 netstat -su

(4)显示 PID 和进程名称
显示TCP端口进程 netstat -pt
显示UDP端口进程 netstat -pu
查看正在监听的tcp端口,并显示对应的监听程序 netstat -ntpl
查看正在监听的udp端口,并显示对应的监听程序 netstat -nupl

(5)不显示主机,端口和用户名 (host, port or user)
当你不想让主机,端口和用户名显示,使用 netstat -n。将会使用数字代替那些名称。该参数可以加速output的输出,因为不用进行比对查询。

(6)持续输出 netstat 信息
netstat 将每隔一秒输出网络信息。
netstat -t -c 2

(7)显示系统不支持的地址族 (Address Families)
netstat --verbose

(8)显示核心路由信息
netstat -rn

(9)找出程序运行的端口
并不是所有的进程都能找到,没有权限的会不显示,使用 root 权限查看所有的信息。
netstat -apn | grep ssh

找出运行在指定端口的进程
netstat -an | grep ':22'

(10)显示网络接口列表
netstat -i

 

posted @ 2019-10-31 18:09  cac2020  阅读(569)  评论(0编辑  收藏  举报