netstat命令用来打印Linux系统的网络状态信息,包括网络连接(network connections)、路由表(routing tables)、网络接口设备统计信息(interface statistics)、伪装连接(masquerade connections)和多播成员信息(multicast memberships)等,可显示与IP、TCP、UDP和ICMP协议相关的统计数据,一般用于检验本机各端口的网络连接情况。。

在linux下直接执行netstat会得到如下结果

从整体上看netstat的输出结果可以分为两个部分。一个是Active Internet connections,二是Active UNIX domain sockets。

(1)Active Internet connections Active Internet connections表示活跃的网络连接,包括UDP和TCP连接信息。其中”Recv-Q”和”Send-Q”指接收队列和发送队列,这些数字一般都是0,如果不是则表示数据发送和接收队列存在堆积,这种情况较为少见。Local Address和Foreign Address表示本地和远端的IP、端口,State表示连接的状态,主要有:

    ESTABLISHED:已建立连接的状态

    LISTEN :侦听来自远方的TCP端口的连接请求

    SYN_SENT:发出主动连接(SYN)的数据包

    SYN_RECV :接收到一个要求连接的主动连接数据包

    FIN_WAIT1 :该套接字服务已中断,该连接正在断线中

    FIN_WAIT2:该连接已挂断,正在等待对方主机响应断线确认的数据包

    TIME_WAIT :连接已挂断,但socket还在网络上等待结束

    CLOSE_WAIT:等待从本地用户发来的连接中断请求

    

 

为了方便理解上述状态具体内容,画出客户端向服务器请求TCP连接的三次握手和客户端主动断开连接的四次挥手过程示意图如下:

 

三次握手:

 

四次挥手:

 

 

(2)Active UNIX domain sockets Active UNIX domain sockets,称为活跃Unix域套接字。

Proto显示连接使用的协议; RefCnt表示使用数量,即通过此套接字连接的进程数;

Flags显示的标志为SO_ACCEPTON(显示为 ACC)、SO_WAITDATA(W)或SO_NOSPACE(N)。如果相应的进程等待一个连接请求,那么SO_ACCECPTON用于未连接的套接字。其它标志通常并不重要。

Types显示套接口的类型,一般为DGRAM(数据报)、STREAM(数据流);

I-Node表示套接字的Inode节点号;

Path表示套接字所在路径。

State显示套接字当前的状态,此字段包含以下关键字之一:  

  FREE:套接字未分配。

  LISTENING:套接字正在监听一个连接请求。除非设置 –listening (-l) 或者 –all (-a) 选项,否则不显示。

  CONNECTING:套接字正要建立连接

  CONNECTED:套接字已连接

  DISCONNECTING:套接字已断开

  (empty):套接字未连

 

命令格式:

  1. netstat[<options>]

语法选项:

  1. -a或--all:显示所有连线中的Socket
  2. -A<网络类型>或--<网络类型>:列出该网络类型连线中的相关地址;
  3. -c或--continuous:持续列出网络状态;
  4. -C或--cache:显示路由器配置的快取信息;
  5. -e或--extend:显示网络其他相关信息;
  6. -F或--fib:显示FIB
  7. -g或--groups:显示多重广播功能群组组员名单;
  8. -h或--help:在线帮助;
  9. -i或--interfaces:显示网络界面信息表单;
  10. -l或--listening:显示监控中的服务器的Socket
  11. -M或--masquerade:显示伪装的网络连线;
  12. -n或--numeric:直接使用ip地址,而不通过域名服务器;
  13. -N或--netlink或--symbolic:显示网络硬件外围设备的符号连接名称;
  14. -o或--timers:显示计时器;
  15. -p或--programs:显示正在使用Socket的程序识别码和程序名称;
  16. -r或--route:显示Routing Table
  17. -s或--statistice:显示网络工作信息统计表;
  18. -t或--tcp:显示TCP传输协议的连线状况;
  19. -u或--udp:显示UDP传输协议的连线状况;
  20. -v或--verbose:显示指令执行过程;
  21. -V或--version:显示版本信息;
  22. -w或--raw:显示RAW传输协议的连线状况;
  23. -x或--unix:此参数的效果和指定"-A unix"参数相同;
  24. --ip或--inet:此参数的效果和指定"-A inet"参数相同。

    netstat -ntlp //查看当前所有tcp端口
    netstat -ntulp |grep 80 //查看所有80端口使用情况
    netstat -an | grep 3306 //查看所有3306端口使用情况
    netstat -lanp //查看一台服务器上面哪些服务及端口
    ps -ef |grep mysqld //查看一个服务有几个端口。比如要查看mysqld
    netstat -pnt |grep :3306 |wc //查看某一端口的连接数量,比如3306端口
    netstat -anp |grep 3306 //查看某一端口的连接客户端IP 比如3306端口

 

 

 

 

常用的命令如下图:

 

 

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

  1. netstat -a

显示信息:

  1. hadoop@master:~$ netstat -a
  2. Active Internet connections (servers and established)
  3. Proto Recv-Q Send-Q Local Address Foreign Address State
  4. tcp 0 0 localhost:domain 0.0.0.0:* LISTEN
  5. tcp 0 0 0.0.0.0:ssh 0.0.0.0:* LISTEN
  6. tcp 0 0 localhost:ipp 0.0.0.0:* LISTEN
  7. tcp 0 0 localhost:mysql 0.0.0.0:* LISTEN
  8. tcp6 0 0 [::]:ssh [::]:* LISTEN
  9. tcp6 0 0 ip6-localhost:ipp [::]:* LISTEN
  10. udp 0 0 localhost:domain 0.0.0.0:*
  11. udp 0 0 0.0.0.0:45465 0.0.0.0:*
  12. udp 0 0 0.0.0.0:ipp 0.0.0.0:*
  13. udp 0 0 0.0.0.0:mdns 0.0.0.0:*
  14. udp6 0 0 [::]:56383 [::]:*
  15. udp6 0 0 [::]:mdns [::]:*
  16. raw6 0 0 [::]:ipv6-icmp [::]:* 7
  17. Active UNIX domain sockets (servers and established)
  18. Proto RefCnt Flags Type State I-Node Path
  19. unix 2 [ ACC ] STREAM LISTENING 40098 @/tmp/.ICE-unix/2304
  20. unix 2 [ ] DGRAM 37416 /run/user/1001/systemd/notify

 

2.列出所有的tcp协议的端口

  1. netstat -at

显示信息:

  1. hadoop@master:~$ netstat -at
  2. Active Internet connections (servers and established)
  3. Proto Recv-Q Send-Q Local Address Foreign Address State
  4. tcp 0 0 localhost:domain 0.0.0.0:* LISTEN
  5. tcp 0 0 0.0.0.0:ssh 0.0.0.0:* LISTEN
  6. tcp 0 0 localhost:ipp 0.0.0.0:* LISTEN
  7. tcp 0 0 localhost:mysql 0.0.0.0:* LISTEN
  8. tcp 0 1 master:55660 36.75.98.34.bc.go:https SYN_SENT
  9. tcp 0 0 master:45170 server-13-32-52-1:https ESTABLISHED
  10. tcp 0 1 master:55662 36.75.98.34.bc.go:https SYN_SENT
  11. tcp 0 0 master:55696 ec2-52-24-186-236:https ESTABLISHED
  12. tcp6 0 0 [::]:ssh [::]:* LISTEN
  13. tcp6 0 0 ip6-localhost:ipp [::]:* LISTEN

 

3.显示每个协议的统计信息

  1. netstat -s

显示信息:

  1. hadoop@master:~$ netstat -s
  2. Ip:
  3. Forwarding: 2
  4. 2700 total packets received
  5. 63 with invalid addresses
  6. 0 forwarded
  7. 0 incoming packets discarded
  8. 2635 incoming packets delivered
  9. 2445 requests sent out
  10. 20 outgoing packets dropped
  11. Icmp:
  12. 43 ICMP messages received
  13. 0 input ICMP message failed
  14. ICMP input histogram:
  15. destination unreachable: 43
  16. 51 ICMP messages sent
  17. 0 ICMP messages failed
  18. ICMP output histogram:
  19. destination unreachable: 51
  20. IcmpMsg:
  21. InType3: 43
  22. OutType3: 51

 

4.显示核心路由信息

  1. netstat -r

显示信息:

  1. hadoop@master:~$ netstat -r
  2. Kernel IP routing table
  3. Destination Gateway Genmask Flags MSS Window irtt Iface
  4. default _gateway 0.0.0.0 UG 0 0 0 ens33
  5. 192.168.81.0 0.0.0.0 255.255.255.0 U 0 0 0 ens33

 

5.持续输出 netstat 信息。netstat -c将每隔一秒输出网络信息

  1. netstat -c

 

6. 找出程序运行的端口。并不是所有的进程都能找到,没有权限的会不显示,使用 root 权限查看所有的信息

  1. root@master:/home/hadoop# netstat -anp
  2. Active Internet connections (servers and established)
  3. Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
  4. tcp 0 0 127.0.0.53:53 0.0.0.0:* LISTEN 964/systemd-resolve
  5. tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1640/sshd
  6. tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 1149/cupsd

 

7. 显示多播组信息

  1. netstat -g

显示信息:

  1. root@master:/home/hadoop# netstat -g
  2. IPv6/IPv4 Group Memberships
  3. Interface RefCnt Group
  4. --------------- ------ ---------------------
  5. lo 1 224.0.0.251
  6. lo 1 all-systems.mcast.net
  7. ens33 1 224.0.0.251
  8. ens33 1 all-systems.mcast.net
  9. lo 1 ff02::fb
  10. lo 1 ip6-allnodes
  11. lo 1 ff01::1
  12. ens33 1 ff02::fb
  13. ens33 1 ff02::1:ffae:db63
  14. ens33 2 ip6-allnodes
  15. ens33 1 ff01::1

 

8.显示接口信息

  1. netstat -i

显示:

  1. root@master:/home/hadoop# netstat -i
  2. Kernel Interface table
  3. Iface MTU RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg
  4. ens33 1500 3856 0 0 0 2715 0 0 0 BMRU
  5. lo 65536 766 0 0 0 766 0 0 0 LRU

 

9.禁止域名解析

正常情况输出结果:

  1. root@master:/home/hadoop# netstat -ltp
  2. Active Internet connections (only servers)
  3. Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
  4. tcp 0 0 localhost:domain 0.0.0.0:* LISTEN 964/systemd-resolve
  5. tcp 0 0 0.0.0.0:ssh 0.0.0.0:* LISTEN 1640/sshd
  6. tcp 0 0 localhost:ipp 0.0.0.0:* LISTEN 1149/cupsd
  7. tcp 0 0 localhost:mysql 0.0.0.0:* LISTEN 1704/mysqld
  8. tcp6 0 0 [::]:ssh [::]:* LISTEN 1640/sshd

禁止域名解析后输出结果:

  1. root@master:/home/hadoop# netstat -nltp
  2. Active Internet connections (only servers)
  3. Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
  4. tcp 0 0 127.0.0.53:53 0.0.0.0:* LISTEN 964/systemd-resolve
  5. tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1640/sshd
  6. tcp 0 0 127.0.0.1:631 0.0.0.0:* LISTEN 1149/cupsd
  7. tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN

我们发现在local address 即主机地址这一栏中,如果没有带n选项,会将套接字所对应的域名解析出来,如果加上n选项,那么就不会显示,即禁止域名解析的功能,这样做有助于提高查询速度,因为减少了对主机域名的查询。

 

netstat的大部分功能都介绍了,如果想知道netstat更高级的功能,请阅读它的手册~

版权声明:本文为zerolin77原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://www.cnblogs.com/zerolin77/p/11942977.html