Linux 查看网络命令 netstat 详解

netstat 是一个用于显示网络连接、路由表和网络统计信息的命令行工具。它可以帮助你查看当前系统中的网络状态,如已建立的连接、监听端口、路由表等。

一、语法:

netstat [options]

二、常用选项:

1. 基础选项:
  • -a:显示所有连接和监听端口。
  • -r:显示系统路由表信息。
  • -n:以数字形式显示地址和端口号,而不使用域名和服务名称。
  • -p:显示与连接关联的进程信息,包括进程 ID(PID)和进程名称(COMMAND)。
2. 连接状态选项:
  • -l:仅显示监听状态的连接。
  • -t:仅显示 TCP 协议的连接。
  • -u:仅显示 UDP 协议的连接。
  • -w:仅显示原始套接字连接。
  • -x:显示 Unix 域套接字连接。
3. 显示格式选项:
  • -c:持续输出信息,每隔一段时间自动刷新显示。可以通过 Ctrl+C 终止。
  • -e:显示扩展信息,包括 UID、GID、Inode 等。
  • -F:使用指定的输出格式进行显示。
  • -o:显示计时器信息。
4. 过滤选项:
  • -C:指定配置文件路径。
  • -E:设置扩展匹配模式。
  • -f:显示指定进程相关的连接信息。
  • -g:显示多播组信息。
  • -h:显示帮助信息。
  • -i:显示指定接口相关的连接信息。
  • -M:显示多播的源和接收者信息。
  • -N:设置输出地址和服务名称时使用数字格式。
  • -O:设置输出格式。
  • -s:显示各种统计信息。
  • -V:显示版本信息。

三、常用用法

1. 显示所有连接和监听端口:
netstat -a

这会显示系统中的所有网络连接和正在监听的端口。

示例输出:

Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 *:ssh                   *:*                     LISTEN
tcp        0      0 localhost:631           *:*                     LISTEN
tcp6       0      0 [::]:ssh                [::]:*                  LISTEN
tcp6       0      0 ip6-localhost:631       [::]:*                  LISTEN
2. 显示所有 TCP 连接:
netstat -at

这会显示所有当前的 TCP 连接,包括本地地址和外部地址。

示例输出:

Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 localhost:631           *:*                     LISTEN
tcp6       0      0 [::]:ssh                [::]:*                  LISTEN
tcp6       0      0 ip6-localhost:631       [::]:*                  LISTEN
3. 显示所有 UDP 连接:
netstat -au

这会显示所有当前的 UDP 连接,包括本地地址和外部地址。

示例输出:

Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
udp        0      0 *:bootpc                *:*
udp        0      0 *:mdns                  *:*
4. 显示监听状态的端口:
netstat -l

这会显示当前系统上处于监听状态的端口。

示例输出:

Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 localhost:631           *:*                     LISTEN
tcp6       0      0 [::]:ssh                [::]:*                  LISTEN
tcp6       0      0 ip6-localhost:631       [::]:*                  LISTEN
5. 显示当前系统的路由表信息:
netstat -r

这会显示当前系统的路由表信息,包括目标地址、网关、接口和标志等。

示例输出:

Kernel IP routing table
Destination     Gateway         Genmask         Flags   MSS Window  irtt Iface
default         gateway         0.0.0.0         UG        0 0          0 eth0
10.0.0.0        0.0.0.0         255.255.255.0   U         0 0          0 eth0
6. 显示与连接关联的进程信息:
netstat -p

这会显示每个连接所关联的进程 ID(PID)和进程名称。

示例输出:

Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 localhost:631           *:*                     LISTEN      1234/cupsd
tcp6       0      0 [::]:ssh                [::]:*                  LISTEN      5678/sshd
tcp6       0      0 ip6-localhost:631       [::]:*                  LISTEN      1234/cupsd
7. 以数字形式显示地址和端口号:
netstat -n

这会以数字形式显示地址和端口号,而不使用域名和服务名称。

示例输出:

Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN
tcp        0      0 127.0.0.1:631           0.0.0.0:*               LISTEN
tcp6       0      0 :::22                   :::*                    LISTEN
tcp6       0      0 ::1:631                 :::*                    LISTEN
8. 显示进程的详细信息:
netstat -e

这会显示与连接关联的扩展信息,如 UID、GID、Inode 等。

示例输出:

Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       User       Inode      PID/Program name
tcp        0      0 localhost:631           *:*                     LISTEN      1234       56789      1234/cupsd
tcp6       0      0 [::]:ssh                [::]:*                  LISTEN      5678       98765      5678/sshd
tcp6       0      0 ip6-localhost:631       [::]:*                  LISTEN      1234       56789      1234/cupsd
9. 查看指定端口是否被占用:
netstat -an | grep 

这会查找并显示指定端口是否被占用。

示例输出:

tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN
tcp        0      0 127.0.0.1:631           0.0.0.0:*               LISTEN
tcp6       0      0 :::22                   :::*                    LISTEN
tcp6       0      0 ::1:631                 :::*                    LISTEN
10. 查找指定端口所属的进程:
```
netstat -ap | grep 
```
这会查找并显示使用指定端口的进程信息。

示例输出:
```
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      5678/sshd
tcp        0      0 127.0.0.1:631           0.0.0.0:*               LISTEN      1234/cupsd
tcp6       0      0 :::22                   :::*                    LISTEN      5678/sshd
tcp6       0      0 ::1:631                 :::*                    LISTEN      1234/cupsd
```
11. 显示网络连接的统计信息:
```
netstat -s
```
这会统计传输层和网络层的数据包、错误、丢失等信息。

示例输出:
```
Ip:
    12345 total packets received
    67890 with invalid addresses
    1234 forwarded
    56789 incoming packets discarded
    98765 incoming packets delivered
Tcp:
    12345 active connections openings
    67890 passive connection openings
    1234 failed connection attempts
    56789 connection resets received
    98765 connections established
```
12. 监控网络连接状态:
```
netstat -c
```
这会持续输出当前系统中的所有网络连接状态,每隔一段时间自动刷新显示。

示例输出:
```
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State
tcp        0      0 localhost:631           *:*                     LISTEN
tcp6       0      0 [::]:ssh                [::]:*                  LISTEN
tcp6       0      0 ip6-localhost:631       [::]:*                  LISTEN
```
13. 显示指定接口相关的连接信息:
```
netstat -i 
```
这会显示指定网络接口相关的连接信息。

示例输出:
```
Kernel Interface table
Iface   MTU Met    RX-OK RX-ERR RX-DRP RX-OVR    TX-OK TX-ERR TX-DRP TX-OVR Flg
eth0   1500   0    12345      0      0      0    67890      0      0      0 BMRU
```
14. 显示监听状态的 TCP 端口和进程信息:
```
netstat -lt
```
这会显示正在监听状态的 TCP 端口以及与之关联的进程信息。

示例输出:
```
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 localhost:631           *:*                     LISTEN      1234/cupsd
tcp6       0      0 [::]:ssh                [::]:*                  LISTEN      5678/sshd
tcp6       0      0 ip6-localhost:631       [::]:*                  LISTEN      1234/cupsd
```
15. 显示网络连接的详细信息:
```
netstat -tup
```
这会显示所有 TCP 和 UDP 连接的详细信息,包括本地地址、外部地址、状态和进程信息。

示例输出:
```
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 localhost:631           *:*                     LISTEN      1234/cupsd
tcp6       0      0 [::]:ssh                [::]:*                  LISTEN      5678/sshd
tcp6       0      0 ip6-localhost:631       [::]:*                  LISTEN      1234/cupsd
```
16. 显示网络连接的计时器信息:
```
netstat -o
```
这会显示与网络连接关联的计时器信息,如定时器状态和持续时间。

示例输出:
```
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       Timer
tcp        0      0 localhost:631           *:*                     LISTEN      timewait (0.00/0/0)
tcp6       0      0 [::]:ssh                [::]:*                  LISTEN      timewait (0.00/0/0)
tcp6       0      0 ip6-localhost:631       [::]:*                  LISTEN      timewait (0.00/0/0)
```
17. 显示指定进程相关的连接信息:
```
netstat -p 
```
这会显示指定进程 ID(PID)相关的连接信息。

示例输出:
```
Active Internet connections (servers and established)
Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name
tcp        0      0 localhost:631           *:*                     LISTEN      1234/cupsd
tcp6       0      0 [::]:ssh                [::]:*                  LISTEN      5678/sshd
tcp6       0      0 ip6-localhost:631       [::]:*                  LISTEN      1234/cupsd
```
18. 显示多播组信息:
```
netstat -g
```
这会显示当前系统中的多播组信息。

示例输出:
```
IPv6/IPv4 Group Memberships
Interface       RefCnt Group
--------------- ------ ---------------------
lo              1      all-systems.mcast.net
eth0            1      all-systems.mcast.net
```

四、注意事项:

  • 需要 root 权限进行操作,以便获取完整的信息。
  • netstat 命令可能会产生大量输出,可以通过管道和过滤命令来筛选所需信息。

你可能感兴趣的:(Linux,linux,服务器,网络,运维)