如何在Linux上使用netstat
的Linux netstat
该命令为您提供了有关网络连接,正在使用的端口以及使用它们的进程的信息宝库。了解如何使用它。
端口,进程和协议
网络套接字可以连接,也可以等待连接。这些连接使用诸如传输控制协议(TCP)或用户数据报协议UDP之类的网络协议。他们使用Internet协议地址和网络端口建立连接。
这个单词 插座 可能会让人联想到导线或电缆的物理连接点的图像,但是在这种情况下,套接字是一种用于处理网络数据连接一端的软件结构。
套接字有两个主要状态: 连接的 并促进正在进行的网络通信,或者 等待 为传入连接以连接到他们。还有其他状态,例如套接字在远程设备上建立连接的过程中的状态,但是撇开瞬态,您可以将套接字视为已连接或正在等待(通常称为 倾听).
监听套接字称为 服务器,并且请求与监听套接字建立连接的套接字称为 客户。这些名称与硬件或计算机角色无关。它们仅定义连接两端的每个套接字的角色。
这 netstat
命令可让您发现连接了哪些套接字以及正在侦听哪些套接字。意思是,它告诉您正在使用哪些端口以及正在使用哪些端口。它可以显示有关网络接口和多播连接的路由表和统计信息。
的功能 netstat
随着时间的推移,它已经在不同的Linux实用程序(例如ip和ss)中复制了。仍然值得了解所有网络分析命令的祖父,因为它适用于所有Linux和Unix操作系统,甚至Windows和Mac。
以下是示例命令的使用方法。
列出所有套接字
这 -一种
(全部)选项 netstat
显示所有已连接和正在等待的套接字。该命令可能会产生较长的清单,因此我们将其通过管道传送到 较少的
.
netstat -a |较少的
该清单包括TCP(IP),TCP6(IPv6)和UDP套接字。
终端窗口中的回绕使得很难看到发生了什么。这是该清单中的几个部分:
活动的Internet连接(服务器和已建立)Proto Recv-Q Send-Q本地地址外部地址状态tcp 0 0 localhost: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本地主机:smtp 0.0.0.0:* LISTEN tcp6 0 0 [::]:ssh [::]:* LISTEN tcp6 0 0 ip6-localhost:ipp [::]:*听 。 。 。活动的UNIX域套接字(服务器和已建立的)Proto RefCnt标志类型状态I-节点路径unix 24 [] DGRAM 12831 / run / systemd / journal / dev-log unix 2 [ACC]流侦听24747 @ / tmp / dbus-zH6clYmvw8 unix 2 [] DGRAM 26372 / run / user / 1000 / systemd / notify unix 2 [] DGRAM 23382 / run / user / 121 / systemd / notify unix 2 [ACC] SEQPACKET LISTENING 12839 / run / udev / control
“活动Internet”部分列出了已连接的外部连接和本地套接字,用于侦听远程连接请求。也就是说,它列出了(或将要)建立到外部设备的网络连接。
“ UNIX域”部分列出了已连接的和正在侦听的内部连接。换句话说,它列出了计算机中不同应用程序,进程和操作系统元素之间已建立的连接。
“活动的互联网”列为:
- 原型: 此套接字使用的协议(例如,TCP或UDP)。
- Recv-Q: 接收队列。这些是已接收并已缓冲的传入字节,等待使用此连接的本地进程读取和使用它们。
- 发送Q: 发送队列。这显示了准备从发送队列发送的字节。
- 本地地址: 连接本地端的地址详细信息。默认为
netstat
显示地址的本地主机名以及端口的服务名称。 - 国外地址: 连接的远端的地址和端口号。
- 状态: 本地套接字的状态。对于UDP套接字,通常为空白。见 状态 下表。
对于TCP连接, 状态 值可以是以下之一:
- 听: 仅服务器端。套接字正在等待连接请求。
- 同步发送: 仅客户端。该套接字已发出连接请求,正在等待以查看是否将被接受。
- 同步接收: 仅服务器端。该套接字在接受连接请求后正在等待连接确认。
- 已确立的: 服务器和客户端。服务器和客户端之间已建立工作连接,从而允许在两者之间传输数据。
- FIN-WAIT-1: 服务器和客户端。该套接字正在等待来自远程套接字的连接终止请求,或者正在等待先前从该套接字发送的连接终止请求的确认。
- FIN-WAIT-2: 服务器和客户端。该套接字正在等待来自远程套接字的连接终止请求。
- CLOSE-WAIT: 服务器和客户端。该套接字正在等待本地用户的连接终止请求。
- 结案: 服务器和客户端。该套接字正在等待远程套接字的连接终止请求确认。
- 最后确认: 服务器和客户端。该套接字正在等待对发送到远程套接字的连接终止请求的确认。
- 时间的等待: 服务器和客户端。该套接字向远程套接字发送了确认,以使其知道已收到远程套接字的终止请求。现在正在等待确保已收到确认。
- 关闭: 没有连接,因此套接字已终止。
“ Unix域”列为:
- 原型: 此套接字使用的协议。它将是“ unix”。
- RefCnt: 参考计数。连接到此套接字的附加进程数。
- 标志: 通常设置为
行政协调会
,代表SO_ACCEPTON
,表示套接字正在等待连接请求。SO_WAITDATA
,显示为w ^
,表示有数据等待读取。SO_NOSPACE
,显示为ñ
,表示没有空间将数据写入套接字(即,发送缓冲区已满)。 - 类型: 套接字类型。见 类型 下表。
- 状态: 套接字的状态。见 状态 下表。
- 智能节点: 与此套接字关联的文件系统索引节点。
- 小路:套接字的文件系统路径。
Unix域套接字 类型 可以是以下之一:
- DGRAM: 套接字在数据报模式下使用固定长度的消息。不能保证数据报是可靠的,无序的或无重复的。
- 溪流: 此套接字是流套接字。这是普通的套接字连接的“常规”类型。这些套接字旨在提供可靠的数据包顺序排序(按顺序)传递。
- 生的: 该套接字被用作原始套接字。原始套接字在OSI模型的网络级别上运行,并且不从传输级别引用TCP和UDP标头。
- RDM: 此套接字位于可靠传递的消息连接的一端。
- 序列号: 此套接字用作顺序数据包套接字,这是提供可靠,有序且无重复的数据包传递的另一种方法。
- 包: 原始接口访问套接字。数据包套接字用于在OSI模型的设备驱动程序(即数据链路层)级别接收或发送原始数据包。
Unix域套接字 状态 可以是以下之一:
- 自由: 该套接字未分配。
- 聆听: 该套接字正在侦听传入的连接请求。
- 连接: 该套接字正在连接中。
- 连接的: 已建立连接,并且套接字能够接收和传输数据。
- 断开连接: 连接正在终止中。
哇,有很多信息!许多 netstat
选项可以以一种或多种方式优化结果,但不会过多地改变内容。让我们来看看。
按类型列出套接字
这 netstat -a
该命令可以提供比您需要看到的更多的信息。如果您只想或需要查看TCP套接字,则可以使用 -t
(TCP)选项将显示限制为仅显示TCP套接字。
netstat -at |较少的
显示量大大减少。列出的几个套接字都是TCP套接字。
这 -u
(UDP)和 -X
(UNIX)选项的行为类似,将结果限制为在命令行上指定的套接字类型。这是正在使用的-u(UDP)选项:
netstat -au |较少的
仅列出了UDP套接字。
按州列出套接字
要查看处于监听或等待状态的套接字,请使用 -l
(收听)选项。
netstat -l |较少的
列出的套接字是处于侦听状态的套接字。
可以将其与-t(TCP,-u(UDP)和-x(UNIX)选项结合使用,以进一步置入感兴趣的套接字。让我们来看一下侦听TCP套接字:
netstat -lt |较少的
现在,我们仅看到TCP侦听套接字。
协议网络统计
要查看协议的统计信息,请使用 -s
(统计)选项,然后传入 -t
(TCP), -u
(UDP),或 -X
(UNIX)选项。如果您只使用 -s
(统计信息)选项本身,您将看到所有协议的统计信息。让我们检查一下TCP协议的统计信息。
netstat -st |较少的
TCP连接的统计信息集合显示在 较少的
.
显示进程名称和PID
使用套接字查看进程的进程ID(PID)以及该进程的名称可能会很有用。这 -p
(程序)选项就是这样做的。让我们看看使用处于侦听状态的TCP套接字的进程的PID和进程名是什么。我们用 须藤
以确保我们收到所有可用的信息,包括通常需要root权限的任何信息。
须藤netstat -p -at
这是格式化表格中的输出:
活动的Internet连接(服务器和已建立的)Proto Recv-Q Send-Q本地地址外部地址状态PID /程序名称tcp 0 0 localhost:domain 0.0.0.0:* LISTEN 6927 / systemd-resolv tcp 0 0 0.0.0.0:ssh 0.0 .0.0:* LISTEN 751 / sshd tcp 0 0本地主机:ipp 0.0.0.0:* LISTEN 7687 / cupsd tcp 0 0 localhost:smtp 0.0.0.0:* LISTEN 1176 / master tcp6 0 0 [::]:ssh [:: ]:* LISTEN 751 / sshd tcp6 0 0 ip6-localhost:ipp [::]:* LISTEN 7687 / cupsd tcp6 0 0 ip6-localhost:smtp [::]:* LISTEN 1176 / master
我们还有一个名为“ PID /程序名称”的列。此列列出了使用每个套接字的PID和进程名称。
列出数字地址
我们可以采取的消除歧义的另一步骤是将本地和远程地址显示为IP地址,而不是其解析的域和主机名。如果我们使用-n
(数字)选项,IPv4地址以点分十进制格式显示:
须藤netstat -an |较少的
IP地址显示为数值。还显示了端口号,并用冒号分隔” :
”(来自IP地址)。
IP地址127.0.0.1表明套接字已绑定到本地计算机的环回地址。您可以将IP地址0.0.0.0理解为本地地址的“默认路由”和外部地址的“任何IP地址”。 IPv6地址显示为“::
”也都是零地址。
可以轻松检查列出的端口,以了解其通常的用途:
- 22: 这是安全外壳(SSH)侦听端口。
- 25: 这是简单邮件传输协议(SMTP)侦听端口。
- 53: 这是域名系统(DNS)侦听端口。
- 68: 这是动态主机配置协议(DHCP)侦听端口。
- 631: 这是通用UNIX打印系统(CUPS)侦听端口。
有关的:127.0.0.1和0.0.0.0有什么区别?
显示路由表
这 -r
(route)选项显示内核路由表。
须藤netstat -r
这是整齐的表格中的输出:
内核IP路由表目标网关Genmask标志MSS窗口irtt Iface默认Vigor.router 0.0.0.0 UG 0 0 0 enp0s3本地链接0.0.0.0 255.255.0.0 U 0 0 0 enp0s3 192.168.4.0 0.0.0.0 255.255.255.0 U 0 0 0 enp0s3
而且,这是各列的含义:
- 目的地: 目标网络或目标主机设备(如果目标不是网络)。
- 网关: 网关地址。星号“
*
如果未设置网关地址,则在此处出现“”。 - Genmask: 路由的子网掩码。
- 标志: 见 标志 下表。
- MSS: 此路由上的TCP连接的默认最大分段大小-这是一个TCP分段中可以接收的最大数据量。
- 窗户: 此路由上的TCP连接的默认窗口大小,指示在接收缓冲区已满之前可以传输和接收的数据包数。实际上,数据包由接收应用程序使用。
- irtt: 初始往返时间。内核引用此值以对响应较慢的远程连接进行TCP参数的动态调整。
- 我面对: 传输通过此路由发送的数据包的网络接口。
这 标志 值可以是以下之一:
- U: 路线到了。
- H: 目标是主机,并且是此路由上可能的唯一目的地。
- G: 使用网关。
- R: 恢复路由以进行动态路由。
- D: 由路由守护程序动态安装。
- 男: 由路由守护程序在收到Internet控制消息协议(ICMP)数据包时进行修改。
- A: 安装者
地址
,自动的DNS和DHCP配置文件生成器。 - C: 缓存条目。
- !: 拒绝路线。
查找进程使用的端口
如果我们通过管道输出 netstat
通过 grep
,我们可以按名称搜索进程并标识其使用的端口。我们使用 -一种
(全部), -n
(数字)和 -p
(程序)先前使用的选项,并搜索“ sshd”。
须藤netstat -anp | grep“ sshd”
grep
找到目标字符串,我们看到 sshd
守护程序正在使用端口22。
当然,我们也可以相反地这样做。如果我们搜索“:22”,我们可以找出哪个进程正在使用该端口(如果有)。
须藤netstat -anp | grep“:22”
这次 grep
找到“:22”目标字符串,我们看到使用此端口的进程是 sshd
守护程序,进程ID 751。
列出网络接口
这 -一世
(接口)选项将显示一个网络接口表,该表 netstat
可以发现。
须藤netstat -i
这是更清晰易懂的输出:
内核接口表Iface MTU RX-OK RX-ERR RX-DRP RX-OVR TX-OK TX-ERR TX-DRP TX-OVR Flg enp0s3 1500 4520671 0 0 0 4779773 0 0 0 BMRU lo 65536 30175 0 0 0 30175 0 0 0 LRU
这是列的含义:
- 我面对: 接口名称。这
enp0s3
接口是到的网络接口 外部 世界,以及罗
interface是回送接口。环回接口使流程可以相互通信 之内 即使计算机未连接到网络,也可以使用网络协议访问计算机。 - MTU: 最大传输单位(MTU)。这是可以发送的最大“数据包”。它由包含路由和协议标志的标头以及其他元数据以及实际传输的数据组成。
- RX-OK: 收到的数据包数量,无错误。
- RX-ERR: 收到的有错误的数据包数。我们希望这个值尽可能低。
- RX-DRP: 丢弃(即丢失)的数据包数量。我们还希望该值尽可能低。
- RX-OVR: 接收时由于溢出而丢失的数据包数。这通常意味着接收缓冲区已满,无法再接收任何数据,但是接收到更多数据,必须将其丢弃。该数字越低越好,零是完美的。
- TX-OK: 传输的数据包数量,无错误。
- RX-ERR: 传输的数据包数量,有错误。我们希望它为零。
- RX-DRP: 传输时丢弃的数据包数量。理想情况下,该值为零。
- RX-OVR: 传输时由于溢出而丢失的数据包数。这通常意味着发送缓冲区已满,无法再接受任何数据,但是更多数据已准备好进行传输,必须丢弃。
- Flg: 标志。见 标志 下表。
这 标志 代表以下内容:
- B: 广播地址正在使用中。
- L: 此接口是回送设备。
- 男: 正在接收所有分组(即,处于混杂模式)。没有任何东西被过滤或丢弃。
- O: 该接口的地址解析协议(ARP)已关闭。
- P: 这是点对点(PPP)连接。
- R: 接口正在运行。
- U: 接口打开。
列出多播组成员身份
简而言之,无论接收者有多少,多播传输都使数据包只能发送一次。例如,对于视频流之类的服务,这从发件人的角度来看极大地提高了效率。
这 -G
(组)选项使 netstat
列出每个接口上套接字的多播组成员身份。
须藤netstat -g
这些列非常简单:
- 界面: 套接字通过其传输的接口的名称。
- RefCnt: 参考计数,即连接到套接字的进程数。
- 团体: 组播组的名称或标识符。
街上的新孩子
route,ip,ifconfig和ss命令可以提供很多功能 netstat
有能力向您展示。它们都是很棒的命令,值得一试。
我们专注于 netstat
因为它是通用的,而不管您使用的是哪种类Unix操作系统,甚至是晦涩的操作系统。