netstat vs ss在Linux上的使用指南

时间:2020-02-23 14:31:23  来源:igfitidea点击:

欢迎使用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 *:*