netstat vs ss在Linux上的使用指南
欢迎使用Linux上的netstat vs ss使用指南,该指南尝试通过示例教我们如何使用netstat和ss命令。我们将通过定义whatssandnetstat命令,它们的用途并通过示例演示如何将它们用于网络分析和故障排除来开始本指南。
什么是netstat?
Netstat是一个命令行网络实用程序,用于显示TCP/UDP的网络连接,网络协议统计信息,接口统计信息,路由表,伪装连接,多播成员身份等。 netstat程序已过时,其替换为iss。某些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 vs ss使用指南,并带有示例:
在本节中,我们将研究Linux和Unix系统中使用的ss和netstat命令行工具的示例。在所有最新发行版中,这些命令应易于使用,我们可以通过在终端上执行命令来调用它们。如果发行版不附带任何工具,请查阅其文档以了解如何安装它们。
以下是netstat命令的命令行用法。我们可以稍后查看ss命令的用法并进行比较,然后确定哪种工具最适合我们。请注意,netstat自弃用后不久将被淘汰,因此建议我们使用ss命令学习。
netstat的用法:
netstat命令使用的常见命令行选项包括:
-l,监听显示监听服务器套接字
-a,全部显示所有套接字(默认值:已连接)
-r,路由显示路由表
一,接口显示接口表
-g,组显示多播组成员身份
-s,统计信息显示网络统计信息(如SNMP)
-M,化装舞会展示伪装的连接
-v,冗长
-W,不要截断IP地址
-n,数字不解析名称
-e,扩展显示其他/更多信息
-p,程序显示套接字的PID /程序名称
-o,计时器显示计时器
-F,fib显示转发信息库(默认)
-C,缓存显示路由缓存而不是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端口,请使用option-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:* ....
显示内核路由表
Option-ris用于查看内核路由表。
$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 ...
显示所有接口的网络静态
可以使用命令option -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端口,但在输出中显示域名。
以连续模式显示输出
使用coption通过每五秒钟刷新一次来连续显示输出。
$ netstat -ac 5
如果我们喜欢我们的工作,请通过以下链接以pdf格式下载本教程来支持我们:
ss用法:
本节通过示例介绍ss命令的用法。这些命令可能会错过一些收藏夹,因此可以随意添加任何注释。 ss命令从内核名称空间获取所有数据,因此与netstat相比可以获取更多数据。
ss命令使用的常见选项是:
n,数字不解析服务名称
-r,resolve:解析主机主机名。
-l,监听显示监听套接字
-o,选项显示计时器信息
-e,扩展显示详细的套接字信息
-m,内存显示套接字内存使用情况
-p,进程显示使用套接字的进程
s,摘要显示套接字使用情况摘要
-N,将网络切换到指定的网络名称空间名称
-4,ipv4仅显示IP版本4套接字
-6,ipv6仅显示IP版本6套接字
0,包显示PACKET套接字
-t,tcp仅显示TCP套接字
-S,sctp仅显示SCTP套接字
-u,udp仅显示UDP套接字
-w,仅原始显示RAW套接字
-x,Unix仅显示Unix域套接字
-f,family = FAMILY类型的显示插座
例子;
列出所有连接
要列出所有连接,只需执行ss命令而不传递任何选项即可。
# ss
显示所有列出的tcp套接字,包括相应的进程
使用的选项是-ltas,如先前显示的选项列表中所述。
# 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)) ...
显示套接字使用情况摘要
pass-soption获取与套接字相关的统计信息列表,-tand-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
仅显示原始数据包
使用-wcommand选项,
# ss -w Recv-Q Send-Q Local Address:Port Peer Address:Port 0 0 *:ipv6-icmp *:*