Linux 上的 netstat 与 ss 使用指南
欢迎阅读 Linux 上的 netstat 与 ss 使用指南,该指南尝试通过示例教您使用 netstat 和 ss 命令。我们将首先定义ss和netstat命令是什么、它们的用途,并通过示例演示如何使用它们进行网络分析和故障排除。
什么是netstat?
Netstat 是一个命令行网络实用程序,用于显示 TCP/UDP 的网络连接、网络协议统计信息、接口统计信息、路由表、伪装连接、多播成员身份等。 netstat 程序已过时,其替代品是ss。 一些 netstat 命令已被 ss 命令取代,例如:
$ netstat -r replaced by $ ip route
$ netstat -i replaced by $ ip -s lin
$ netstat -g replaced by $ ip maddr.
ss是什么?
ss 是一个用于研究 Linux 和 Unix 系统中套接字的实用程序。它显示的信息类似于 netstat 并且能够转储套接字统计信息。与其他工具相比,ss 命令可以显示更多的 TCP 和状态信息。默认情况下,ss 显示已建立连接的打开的非侦听套接字(例如 TCP/UNIX/UDP)的列表。
Linux 上的 netstat 与 ss 使用指南及示例:
在本节中,我们将了解 Linux 和 Unix 系统中使用的 ss 和 netstat 命令行工具的示例。在所有最新发行版上,这些命令应该随时可用,您可以通过在终端上键入命令来调用它们。如果您的发行版未附带任何工具,请参阅其文档以了解如何安装它们。
以下是netstat命令的命令行用法。您稍后可以查看 ss 命令的用法并进行比较,然后您将决定哪个工具最适合您。请注意,netstat 已被弃用,很快就会被淘汰,因此建议您学习使用 ss 命令。
netstat 用法:
与 netstat 命令一起使用的常见命令行选项有:
-l, –listening 显示监听服务器套接字
-a, –all 显示所有套接字(默认:已连接)
-r, –route 显示路由表
–i, –interfaces 显示接口表
-g, –groups 显示组播组成员资格
-s, –statistics 显示网络统计信息(如 SNMP)
-M, –masquerade 显示伪装的连接
-v, –verbose 详细
-W, –wide 不截断 IP 地址
-n, –numeric 不解析名称< br>-e, –extend 显示其他/更多信息
-p, –programs 显示套接字的 PID/程序名称
-o, –timers 显示计时器
-F, –fib 显示转发信息库(默认)
-C, –cache 显示路由缓存而不是FIB
用法示例:
显示所有套接字(默认:已连接)
要获取系统上不同协议的所有活动连接的列表,请运行:
$ netstat -a
列出所有 UDP 端口
$ netstat -au
列出所有 TCP 端口:
$ netstat -at
列出所有监听端口:
$ netstat -l
列出所有侦听 TCP 端口:
$ netstat -lt
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 0.0.0.0:nfs 0.0.0.0:* LISTEN
tcp 0 0 localhost.localdo:18083 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:37959 0.0.0.0:* LISTEN
tcp 0 0 localhost.locald:mshvlm 0.0.0.0:* LISTEN
列出所有监听的udp端口:
要列出侦听 udp 端口,请使用选项-lu
$ netstat -lu
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State
udp 0 0 0.0.0.0:52179 0.0.0.0:*
udp 0 0 0.0.0.0:mountd 0.0.0.0:*
udp 0 0 dev.jmtai.com:bootpc 0.0.0.0:*
udp 0 0 0.0.0.0:sunrpc 0.0.0.0:*
....
显示内核路由表
选项-r用于查看内核路由表。
$ netstat -r
Kernel IP routing table
Destination Gateway Genmask Flags MSS Window irtt Iface
default _gateway 0.0.0.0 UG 0 0 0 tun0
default _gateway 0.0.0.0 UG 0 0 0 wlp1s0
10.10.46.0 _gateway 255.255.255.0 UG 0 0 0 tun0
10.20.0.0 0.0.0.0 255.255.255.0 U 0 0 0 tun0
查看哪个进程正在侦听特定端口:
格式为:netstat -pln | grep <端口> | awk ‘{print $NF}’。作为查看哪个进程正在侦听端口 22 的示例:
$ sudo netstat -pln | grep 22 | awk '{print $NF}'
7885/sshd
要确认这一点,请通过 ps 命令进行检查。
$ ps aux | grep 7885
root 7885 0.0 0.0 40692 5452 ? Ss 18:54 0:00 /usr/bin/sshd -D
仅显示 IPv4 侦听端口(TCP 和 UDP)
默认情况下,Netstat 会提供 IPv4 和 IPv6 侦听端口列表。要获取仅包含 IPv4 的列表,请使用:
$ sudo netstat -vutlnp --listening -4
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 7885/sshd
tcp 0 0 0.0.0.0:2049 0.0.0.0:* LISTEN -
tcp 0 0 127.0.0.1:18083 0.0.0.0:* LISTEN 429/vboxwebsrv
tcp 0 0 0.0.0.0:37959 0.0.0.0:* LISTEN -
tcp 0 0 127.0.0.1:6600 0.0.0.0:* LISTEN 678/mpd
tcp 0 0 0.0.0.0:49743 0.0.0.0:* LISTEN 422/rpc.statd
tcp 0 0 0.0.0.0:111 0.0.0.0:* LISTEN 1/init
...
显示所有接口的网络统计信息
可以使用命令选项-s查看界面统计信息。
sudo netstat -s
要显示 tcp 统计信息,请使用 -st, 要显示 udp 统计信息,请使用 -su
显示 IPv4 和 IPv6 的多播组成员身份
组播是组通信,其中数据传输同时发送到一组目标计算机。要获取多播组成员身份,请使用选项-g
$ sudo netstat -g
IPv6/IPv4 Group Memberships
Interface RefCnt Group
--------------- ------ ---------------------
lo 1 all-systems.mcast.net
wlp1s0 1 224.0.0.251
wlp1s0 1 all-systems.mcast.net
tun0 1 224.0.0.251
tun0 1 all-systems.mcast.net
lo 1 ff02::1
lo 1 ff01::1
wlp1s0 1 ff02::fb
wlp1s0 1 ff02::1:ff48:91f8
wlp1s0 1 ff02::1
wlp1s0 1 ff01::1
tun0 1 ff02::fb
tun0 1 ff02::1
tun0 1 ff01::1
列出所有正在侦听的 UNIX 端口
$ sudo netstat -lx
Active UNIX domain sockets (only servers)
Proto RefCnt Flags Type State I-Node Path
unix 2 [ ACC ] STREAM LISTENING 21766 /tmp/.X11-unix/X0
unix 2 [ ACC ] STREAM LISTENING 276493 /run/user/1000/pulse/cli
unix 2 [ ACC ] STREAM LISTENING 21789 /run/user/1000/i3/ipc-socket.644
unix 2 [ ACC ] STREAM LISTENING 49182 /tmp/qtsingleapp-HipCha-9b70-3e8
unix 2 [ ACC ] STREAM LISTENING 21765 @/tmp/.X11-unix/X0
unix 2 [ ACC ] STREAM LISTENING 18468 /run/gssproxy.sock
unix 2 [ ACC ] STREAM LISTENING 2609 /run/systemd/private
unix 2 [ ACC ] STREAM LISTENING 2620 /run/rpcbind.sock
...
查找正在运行的进程使用的端口
$ sudo netstat -ap | grep ssh
tcp 0 0 0.0.0.0:ssh 0.0.0.0:* LISTEN 7885/sshd
tcp6 0 0 [::]:ssh [::]:* LISTEN 7885/sshd
在可能的情况下显示 IP 地址的域名:
netstat -ltF
此命令将列出侦听 tcp 端口,但在输出中显示域名。
以连续模式显示输出
使用 –c 选项可以通过每五秒刷新一次来连续显示输出。
netstat -ac 5
如果您喜欢我们所做的事情,请从下面的链接下载本教程的 pdf 版本来支持我们:
SS的用法:
本节通过示例介绍 ss 命令的用法。这些命令可能会遗漏一些您最喜欢的命令,因此请随时对任何添加内容发表评论。 ss 命令从内核命名空间获取所有数据,因此与 netstat 相比可以获取更多数据。
与 ss 命令一起使用的常见选项有:
–n, –numeric 不解析服务名称
-r, –resolve :解析主机主机名。
-l, –listening< 显示监听套接字
-o, –options 显示定时器信息
-e, –extended 显示详细的套接字信息
- m, –memory 显示套接字内存使用情况
-p, –processes 显示使用套接字的进程
–s, –summary 显示套接字使用情况摘要
-N, –net 切换到指定的网络命名空间名称
-4, –ipv4 仅显示 IP 版本 4 套接字
-6, –ipv6 仅显示 IP 版本 6 套接字
–0, –packet 显示 PACKET 套接字
-t, –tcp 仅显示TCP 套接字
-S, –sctp 仅显示 SCTP 套接字
-u, –udp 仅显示 UDP 套接字
-w, – raw 仅显示 RAW 套接字
-x, –unix 仅显示 Unix 域套接字
-f, –family=FAMILY 显示类型的套接字家庭
例子;
列出所有连接
要列出所有连接,只需执行 ss 命令,无需传递任何选项。
# ss
显示所有列出的 tcp 套接字,包括相应的进程
使用的选项是-lt,如前面显示的选项列表中所述。
# ss -tlp
显示端口 443 上连接到 192.168.1.10 的所有套接字
# ss -t dst 192.168.1.10:443
显示所有与 ssh 相关的连接
# ss -t state established '( dport = :ssh or sport = :ssh )'
Recv-Q Send-Q Local Address:Port Peer Address:Port
0 0 192.168.0.16:60334 192.168.20.3:ssh
列出没有主机名解析的 tcp 和 udp 端口
# ss -tun
Netid State Recv-Q Send-Q Local Address:Port Peer Address:Port
tcp ESTAB 0 0 192.168.0.16:41464 216.58.223.74:443
tcp ESTAB 0 0 192.168.0.16:57354 5.160.200.106:80
tcp ESTAB 0 0 192.168.0.16:60334 88.198.68.148:22
....
拥有连接的打印进程
# ss -ltp
State Recv-Q Send-Q Local Address:Port Peer Address:Port
LISTEN 0 128 0.0.0.0:ssh 0.0.0.0:* users:(("sshd",pid=7885,fd=3))
LISTEN 0 64 0.0.0.0:shilp 0.0.0.0:*
LISTEN 0 100 127.0.0.1:18083 0.0.0.0:* users:(("vboxwebsrv",pid=429,fd=9))
...
显示套接字使用摘要
通过-s选项获取套接字相关统计信息的列表,-t和-u可分别用于仅显示 tcp 或 udp 统计信息。默认情况下两者都会显示。
# ss -s
Total: 818 (kernel 946)
TCP: 65 (estab 42, closed 3, orphaned 4, synrecv 0, timewait 1/0), ports 0
Transport Total IP IPv6
* 946 - -
RAW 1 0 1
UDP 14 8 6
TCP 62 56 6
INET 77 64 13
FRAG 0 0 0
显示定时器信息
可以使用 -o 选项获取计时器信息。
# ss -tn -o
仅显示原始数据包
使用-w命令选项,
# ss -w
Recv-Q Send-Q Local Address:Port Peer Address:Port
0 0 *:ipv6-icmp *:*
Linux 上的 netstat 与 ss 使用指南到此结束,我们将不断更新列表,因此请在 Twitter 和 Facebook 上关注我们以获取最新更新。通过使用下面的链接下载本指南的 pdf 版本来支持我们。