一文全面总结 netstat, nc, ss, 及命令区分(宝藏收藏级)

一文全面总结 netstat, nc, ss, 及命令区分(宝藏收藏级)_第1张图片
博客原文

文章目录

    • netstat
      • 简介
      • 常用参数
      • 列名分析
        • 1)netstat -a 列名分析
        • 2)netstat -r 列名分析
        • 3)netstat -i 列名分析
      • 实例
        • 1)显示系统网络状态的所有连接
        • 2)显示系统网络状态的UDP连接信息
        • 3)显示网卡状态信息
        • 4)显示网络路由表信息
        • 5)查看关于[sshd](https://so.csdn.net/so/search?q=sshd&spm=1001.2101.3001.7020)的PID值
        • 6) 使用管道符查看某个在运行的服务信息
        • 7)访问每种协议的统计信息
    • ss
      • 简介
      • 语法格式
      • 基本参数
      • 列名分析
      • 常用命令
      • 实例
        • 1) 列出已建立的连接
        • 2) 监听TCP协议的套接字信息
        • 3) 查看主机监听的端口
        • 4) 显示在运行进程的信息
        • 5) 显示所有已经建立的信息
        • 6) 显示服务更多的信息
        • 7) 显示套接字的使用信息
        • 8\) 匹配远程与本地地址和端口号
        • **9) ss列出处在FIN-WAIT-1状态的http、https连接**
    • ss 与 netstat 对比
    • nc
      • 简介
      • 常用参数
      • 实例
        • 1) TCP 端口扫描
        • 2) 扫描 UDP 端口
        • 3) 扫描指定端口
        • 4) 终端之间通信聊天
        • 5) 文件传输

netstat

简介

netstat 的英文单词“network statistics”,命令主要功能用于各种网络相关信息,例显示网络连接状态、路由表信息、接口状态、NAT、多播成员等信息。

常用参数

参数 含义
-n 不解析域名, 以数字显示
-a 显示所有连线中的Socket
-t 列出 tcp 网络封包的数据
-u 列出 udp 网络封包的数据
-p pid, 显示进程号
-l 仅列出在监听的服务状态
-i 列出网卡信息
-r 列出路由表信息

列名分析

1)netstat -a 列名分析

netstat参考图

  • 协议(Protocol) :表示网络连接的协议类型,例如tcp、udp等协议
  • 接收队列(Recv-Q) :接收socket(套接字)队列中的数据量,以字节为单位
  • 发送队列(Send-Q) :发送socket(套接字)队列中的数据量,以字节为单位
  • 本地地址(Local Address):运行netstat命令的本地计算机地址
  • 外部地址(Foreign Address):与本机端口通信的外部socket。
  • 状态(State) :每个服务网络连接的状态

Local Address 解释:

  1. Local Address 部分的0.0.0.0:22 表示监听服务器上所有ip地址的所有(0.0.0.0表示本地所有ip),比如你的服务器是有172.172.230.210和
    172.172.230.11两个ip地址,那么0.0.0.0:22此时表示监听172.172.230.210,172.172.230.211,127.0.0.1三个地址的22端口

  2. :::22 这个也表示监听本地所有ip的22端口,跟上面的区别是这里表示的是IPv6地址,上面的0.0.0.0表示的是本地所有IPv4地址
    NOTE
    “:::” 这三个: 的前两个"::“,是"0:0:0:0:0:0:0:0"的缩写,相当于IPv6的"0.0.0.0”,就是本机的所有IPv6地址,第三个:是IP和端口的分隔符

  3. 127.0.0.1:631 这个表示监听本机的loopback地址的631端口(如果某个服务只监听了回环地址,那么只能在本机进行访问,无法通过tcp/ip 协议进行远程访问)

  4. ::1:631 这个表示监听IPv6的回环地址的631端口,::1这个表示IPv6的loopback地址

  5. 172.172.230.211:3306 这里我们看到我们的mysqld进程监听的是172.172.230.211的3306端口,这是因为我们在启动的时候指定了bind_address=172.172.230.211参数,如果不指定bind_address的话,mysqld默认监听:::3306(本机所有ip地址的3306端口 -IPv6)


2)netstat -r 列名分析

  • 目标(Destination) :目标计算机的地址
  • 网关(Gateway) :中间网关地址
  • 网络掩码(Genmask) :网络掩码,用于指定网络中的可用主机
  • 标志(Flags) :指定是哪种路由
  • MSS :默认最大段的大小
  • 窗口(Window) :默认窗口大小
  • 初始往返时间(irtt) :发送信号并接收其确认的总时间
  • 接口(lface) :数据包将通过其路由的接口
3)netstat -i 列名分析

接口(Iface) :接口类型

MTU :最大传输单位

RX :接收数据包

TX :发送数据包

OK :无错误的数据包

ERR :有错误的数据包

DRP :丢包的数量

OVR :数据包由于溢出而丢失

Fig :定义接口配置的标志

实例

1)显示系统网络状态的所有连接
$ netstat -a | head 
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
tcp        0      0 0.0.0.0:sunrpc          0.0.0.0:*               LISTEN     
tcp        0      0 localhost.locald:domain 0.0.0.0:*               LISTEN     
tcp        0      0 0.0.0.0:ssh             0.0.0.0:*               LISTEN     
tcp        0      0 localhost:ipp           0.0.0.0:*               LISTEN     
tcp        0      0 localhost:smtp          0.0.0.0:*               LISTEN     
tcp6       0      0 [::]:sunrpc             [::]:*                  LISTEN     
tcp6       0      0 [::]:ssh                [::]:*                  LISTEN     
tcp6       0      0 localhost:ipp           [::]:*                  LISTEN     
2)显示系统网络状态的UDP连接信息
$ netstat -anu
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State      
udp        0      0 0.0.0.0:875             0.0.0.0:*                          
udp        0      0 0.0.0.0:5353            0.0.0.0:*                          
udp        0      0 0.0.0.0:36816           0.0.0.0:*                          
udp        0      0 192.168.122.1:53        0.0.0.0:*                          
udp        0      0 0.0.0.0:67              0.0.0.0:*                          
udp        0      0 0.0.0.0:68              0.0.0.0:*                          
3)显示网卡状态信息
$ netstat -i
Kernel Interface table
Iface             MTU    RX-OK RX-ERR RX-DRP RX-OVR    TX-OK TX-ERR TX-DRP TX-OVR Flg
ens32            1500      456      0      0 0           366      0      0      0 BMRU
lo              65536        4      0      0 0             4      0      0      0 LRU
virbr0           1500        0      0      0 0             0      0      0      0 BMU
4)显示网络路由表信息
$ netstat -r 
Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
default         gateway         0.0.0.0         UG        0 0          0 ens32
192.168.2.0     0.0.0.0         255.255.255.0   U         0 0          0 ens32
5)查看关于sshd的PID值
$ netstat -p | grep ssh
unix  3      [ ]         STREAM     CONNECTED     26245    1216/sshd            
6) 使用管道符查看某个在运行的服务信息
$ netstat -antup | grep httpd
tcp6       0      0 :::80                   :::*                    LISTEN      322/httpd           
tcp6       0      0 :::443                  :::*                    LISTEN      322/httpd           
7)访问每种协议的统计信息
$ netstat -s 
Ip:
    463 total packets received
    0 forwarded
    0 incoming packets discarded
    220 incoming packets delivered
    310 requests sent out
    81 dropped because of missing route
Icmp:
    2 ICMP messages received
    0 input ICMP message failed.
    ICMP input histogram:
        destination unreachable: 2
    3 ICMP messages sent
......

ss

简介

ss(Socket Statistics)命令主要功能是显示套接字信息。与netstat命令的使用十分的相似,都是用于显示套接字信息,而ss命令的优势在于它能够显示更多TCP和连接状态的详情信息,并且速度更快更高效。

语法格式

ss的语法格式是:ss 【参数】【过滤器】

SYNOPSIS
ss [options] [ FILTER ]

基本参数

命令的基本参数有以下这些,参数会比较多,当然也可以说明这个命令的用法会挺丰富的。

-n ** 不解析域名
-a 显示所有套接字
**-l **** 显示处于监听状态的套接字
-o 显示计时器信息
-e 显示详细的套接字信息
-m 显示socket的内存情况
-p ** 显示使用套接字的过程
-i 显示内部的TCP信息
-s 显示socket使用情况
-4 显示ipv4的套接字信息
-6 显示ipv6的套接字信息
-0 显示PACKET套接字信息
-t ** 显示TCP的套接字信息
-u 显示UDP套接字信息
-d 显示DCCP套接字信息
-w 显示RAW套接字信息
-D 将原始TCP套接字信息转储到文件
-r, --resolve 解析IP和端口号, 解析主机名

列名分析

一文全面总结 netstat, nc, ss, 及命令区分(宝藏收藏级)_第2张图片

Netid 网络标识符
State 每个服务的连接状态
Recv-Q 接收socket(套接字)队列中的数据量,以字节为单位
Send-Q 发送socket(套接字)队列中的数据量,以字节为单位
Local Address 运行本地的计算机地址
Port 服务端口
Peer Address 对等端口

常用命令

$ ss -l  # 显示本地打开的所有端口

$ ss -pl  # 显示每个进程具体打开的socket

$ ss -t -a  # 显示所有tcp socket

$ ss -u -a  # 显示所有的UDP Socekt

$ ss -o state established '( dport = :smtp or sport = :smtp )'  # 显示所有已建立的SMTP连接

$ ss -o state established '( dport = :http or sport = :http )'  # 显示所有已建立的HTTP连接

$ ss -x src /tmp/.X11-unix/*  # 找出所有连接X服务器的进程

$ ss -s  # 列出当前socket详细信息

实例

1) 列出已建立的连接

默认情况,只使用ss命令,不加任何参数的情况下,它会显示所有已建立连接的套接字列表信息

$ ss |wc -l
716
$ ss | head -n 3
Netid  State      Recv-Q Send-Q Local Address:Port                 Peer Address:Port                
u_str  ESTAB      0      0       * 37084                 * 37928                
u_str  ESTAB      0      0       * 36812                 * 36814                
2) 监听TCP协议的套接字信息

可以使用-l参数监听所有tcp协议的套接字内容

$ ss -lt
State      Recv-Q Send-Q  Local Address:Port                   Peer Address:Port                
LISTEN     0      100         127.0.0.1:smtp                              *:*                    
LISTEN     0      128                 *:sunrpc                            *:*                    
LISTEN     0      5       192.168.122.1:domain                            *:*                    
LISTEN     0      128                 *:ssh                               *:*                   
3) 查看主机监听的端口

-n表示不解析域名,显示的是IP+端口的格式

$ ss -tnl 
State      Recv-Q Send-Q    Local Address:Port                   Peer Address:Port              
LISTEN     0      100           127.0.0.1:25                                *:*                  
LISTEN     0      128                   *:111                               *:*                  
LISTEN     0      5         192.168.122.1:53                                *:*                  
LISTEN     0      128                   *:22                                *:*                  
LISTEN     0      128           127.0.0.1:631                               *:*              
4) 显示在运行进程的信息

需要使用到-p的参数,结合-tl是显示tcp协议的服务并且处于监听状态下的信息

$ ss -tlp  |head -10
State      Recv-Q Send-Q Local Address:Port                 Peer Address:Port                
LISTEN     0      100    127.0.0.1:smtp                     *:*                     users:(("master",pid=1284,fd=13))
LISTEN     0      128        *:sunrpc                   *:*                     users:(("rpcbind",pid=704,fd=8))

可以看到在最后一列会显示进程的名称、PID、fd文件描述符等信息。

5) 显示所有已经建立的信息

需要使用-a参数,表示显示所有的连接信息

$ ss -a | wc -l
963
$ ss  | wc -l
716

还可以在加上-t -n参数使用

$ ss -ant 
State      Recv-Q Send-Q    Local Address:Port                   Peer Address:Port              
LISTEN     0      100           127.0.0.1:25                                *:*                  
LISTEN     0      128                   *:111                               *:*                  
LISTEN     0      5         192.168.122.1:53                                *:*                       
ESTAB      0      0       192.168.157.166:22                  192.168.157.213:65011              
LISTEN     0      100               [::1]:25                             [::]:*                  

$ ss -nt 
State      Recv-Q Send-Q    Local Address:Port                   Peer Address:Port              
ESTAB      0      0       192.168.157.166:22                  192.168.157.213:65011              
6) 显示服务更多的信息

如显示-o时间信息、-m显示套接字使用的内容、-i显示内部tcp的信息

$ ss -imo | head -2
Netid  State      Recv-Q Send-Q Local Address:Port                 Peer Address:Port                
u_str  ESTAB      0      0       * 37084                 * 37928                 skmem:(r0,rb212992,t0,tb212992,f0,w0,o0,bl0,d0)
7) 显示套接字的使用信息

显示使用信息需要用到-s的参数

$ ss -s 
Total: 1711 (kernel 2055)
TCP:   11 (estab 1, closed 1, orphaned 0, synrecv 0, timewait 0/0), ports 0

Transport Total     IP        IPv6
*	      2055      -         -        
RAW	      1         0         1        
UDP	      11        8         3        
TCP	      10        6         4        
INET	  22        14        8        
FRAG	  0         0         0        
8) 匹配远程与本地地址和端口号

这里需要用到几种参数格式

分别是:
dst :过滤连接的目标地址
src: 过滤连接的本地地址
dport:目标端口
sport:来源端口

匹配远程地址和端口号

ss dst 192.168.157.33
ss dst 192.168.157.33:443
ss dst 192.168.157.33:http

匹配本地端口和端口号

ss src 192.168.157.166
ss src 192.168.157.166:22
ss src 192.168.157.166:ssh

8.1) 当然还可以将本地与远程端口和一个数进行比较

使用方法:

ss dport OP num
ss sport OP num

OP 及关系运算符:

<= le 小于等于
== eq 等于
!= ne 不等于
> gt 大于
< lt 小于

显示来源端口小于50的端口号的内容

$ ss -ntul sport lt 50
Netid  State      Recv-Q Send-Q Local Address:Port                Peer Address:Port              
tcp    LISTEN     0      100        127.0.0.1:25                             *:*                  
tcp    LISTEN     0      128                *:22                             *:*                  
tcp    LISTEN     0      100            [::1]:25                          [::]:*                  
tcp    LISTEN     0      128             [::]:22                          [::]:*              

如果要用符号,则需要在符号前面加上转义符。

$ ss -ntul sport \< 50
Netid  State      Recv-Q Send-Q Local Address:Port                Peer Address:Port              
tcp    LISTEN     0      100        127.0.0.1:25                             *:*                  
tcp    LISTEN     0      128                *:22                             *:*                  
tcp    LISTEN     0      100            [::1]:25                          [::]:*                  
tcp    LISTEN     0      128             [::]:22                          [::]:*            
9) ss列出处在FIN-WAIT-1状态的http、https连接
$ ss -o state fin-wait-1 '( sport = :http or sport = :https )'

ss常用的state状态:

  1. established
  2. syn-sent
  3. syn-recv
  4. fin-wait-1
  5. fin-wait-2
  6. time-wait
  7. closed
  8. close-wait
  9. last-ack
  10. listen
  11. closing
  12. all : All of the above states
  13. connected : All the states except for listen and closed
  14. synchronized : All the connected states except for syn-sent
  15. bucket : Show states, which are maintained as minisockets, i.e. time-wait and syn-recv.
  16. big : Opposite to bucket state.

一文全面总结 netstat, nc, ss, 及命令区分(宝藏收藏级)_第3张图片

主动连接端可能的状态有: CLOSED SYN_SEND ESTABLISHED
主动关闭端可能的状态有: FIN_WAIT_1 FIN_WAIT_2 TIME_WAIT
被动连接端可能的状态有: LISTEN SYN_RECV ESTABLISHED
被动关闭端可能的状态有: CLOSE_WAIT LAST_ACK CLOSED

ss 与 netstat 对比

ss 执行的时候消耗资源以及消耗的时间都比 netstat 少很多。

ss 的优势在于它能够显示更多更详细的有关 TCP 和连接状态的信息,而且比 netstat 更快速更高效。原因如下:

  1. 当服务器的 socket 连接数量变得非常大时,无论是使用 netstat 命令还是直接 cat /proc/net/tcp,执行速度都会很慢。可能你不会有切身的感受,但请相信我,当服务器维持的连接达到上万个的时候,使用netstat等于浪费生命,而用ss才是节省时间。
  2. ss快的秘诀在于它利用到了TCP协议栈中tcp_diagtcp_diag是一个用于分析统计的模块,可以获得Linux内核中第一手的信息,这就确保了ss的快捷高效。当然,如果你的系统中没有tcp_diag,ss也可以正常运行,只是效率会变得稍慢(但仍然比netstat要快)。

nc

简介

nc命令的主要作用如下:

  • 实现任意 TCP/UDP 端口的侦听,nc 可以作为 server 以 TCP 或 UDP 方式侦听指定端口
  • 端口的扫描,nc 可以作为 client 发起 TCP 或 UDP 连接
  • 机器之间传输文件
  • 机器之间网络测速
  • 安装
    • yum install -y nc
    • apt install -y nc

常用参数

参数 含义
-p<通信端口> 设置本地主机使用的通信端口
-l 监听模式
-u 使用UDP传输(tcp 不带参数, 默认)
-v 显示指令执行过程
-w<超时秒数> 设置连接超时时间
-z 使用0输入/输出模式,只在扫描通信端口时使用

实例

1) TCP 端口扫描
$ nc -v -z -w 1 192.168.254.130 20-23
192.168.0.3: inverse host lookup failed: Unknown host
nc: connect to 192.168.254.130 port 20 (tcp) failed: Connection refused
nc: connect to 192.168.254.130 port 21 (tcp) failed: Connection refused
Connection to 192.168.254.130 22 port [tcp/ssh] succeeded!
nc: connect to 192.168.254.130 port 23 (tcp) failed: Connection refused

扫描 192.168.254.130 的端口, 范围是 20-23, -w 11 秒超时, v详细输出

2) 扫描 UDP 端口
$ nc -u -z -w2 192.168.254.130 20-23
3) 扫描指定端口
$ nc -nvv 192.168.254.130 80 # 扫描 80 端口
nc: connect to 192.168.254.130 port 80 (tcp) failed: Connection refused

$ nc -nvv 192.168.254.130 2 # 扫描 22 端口
Connection to 192.168.254.130 22 port [tcp/*] succeeded!
SSH-2.0-OpenSSH_8.2p1 Ubuntu-4ubuntu0.11
Invalid SSH identification string.
4) 终端之间通信聊天

image-20240126195555358

服务端监听服务, 客户端请求 (服务端 <== 请求 ==> 客户端)

5) 文件传输

image-20240126200157176

参考:

  1. https://blog.csdn.net/rhn_111/article/details/129444051?spm=1001.2014.3001.5502
  2. https://blog.csdn.net/mr_wanter/article/details/125076995?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522170626215816800186510143%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id=170626215816800186510143&biz_id=0&utm_medium=distribute.pc_search_result.none-task-blog-2alltop_positive~default-1-125076995-null-null.142
  3. https://blog.csdn.net/rhn_111/article/details/129166218
  4. https://www.runoob.com/linux/linux-comm-netstat.html
  5. https://www.runoob.com/linux/linux-comm-nc.html
  6. https://blog.csdn.net/jiajiren11/article/details/80887528

你可能感兴趣的:(Linux,base,php,开发语言,linux,云原生,运维)