如何在linux上使用netstat

Linux netstat命令为您提供了有关网络连接、正在使用的端口以及使用它们的进程的信息宝库。学习如何使用它。...

Linux netstat命令为您提供了有关网络连接、正在使用的端口以及使用它们的进程的信息宝库。学习如何使用它。

端口、进程和协议

可以连接网络套接字,也可以等待连接。连接使用网络协议,如传输控制协议(TCP)或用户数据报协议UDP。他们使用互联网协议地址和网络端口建立连接。

sockets一词可能会让人联想到导线或电缆的物理连接点,但在本文中,socket是一种用于处理网络数据连接一端的软件结构。

套接字有两种主要状态:它们要么已连接并促进正在进行的网络通信,要么正在等待传入连接连接到它们。还有其他一些状态,例如套接字在远程设备上建立连接的过程中处于中间状态,但抛开瞬时状态不谈,可以将套接字视为正在连接或正在等待(通常称为侦听)。

侦听套接字称为服务器,请求与侦听套接字连接的套接字称为客户机。这些名称与硬件或计算机角色无关。它们只是在连接的每一端定义每个套接字的角色。

netstat命令允许您发现哪些套接字已连接,哪些套接字正在侦听。也就是说,它告诉您哪些端口正在使用,哪些进程正在使用它们。它可以显示路由表和有关网络接口和多播连接的统计信息。

netstat的功能随着时间的推移在不同的Linux实用程序中得到了复制,比如ip和ss。这仍然是值得了解的所有网络分析命令,因为它是所有Linux和Unix操作系统,甚至在Windows和Mac。

下面是如何使用它,并附有示例命令。

列出所有套接字

-a(all)选项使netstat显示所有连接的和等待的套接字。这个命令可能会产生一个很长的列表,所以我们将它导入较少的列表中。

netstat -a | less

如何在linux上使用netstat

清单包括TCP(IP)、TCP6(IPv6)和UDP套接字。

如何在linux上使用netstat

终端窗口中的环绕使得看到正在发生的事情有点困难。下面是该列表中的几个部分:

Active Internet connecti*** (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State 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 localhost:**tp 0.0.0.0:* LISTEN tcp6 0 0 [::]:ssh [::]:* LISTEN tcp6 0 0 ip6-localhost:ipp [::]:* LISTEN . . . Active UNIX domain sockets (servers and established) Proto RefCnt Flags Type State I-Node Path unix 24 [ ] DGRAM 12831 /run/systemd/journal/dev-log unix 2 [ ACC ] STREAM LISTENING 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

“Active Internet”部分列出了连接的外部连接和侦听远程连接请求的本地套接字。也就是说,它列出了已经(或将要)建立到外部设备的网络连接。

“UNIX域”部分列出了已连接和正在侦听的内部连接。换句话说,它列出了计算机中不同应用程序、进程和操作系统元素之间建立的连接。

“活动Internet”列包括:

  • Proto:这个套接字使用的协议(例如,TCP或UDP)。
  • Recv-Q:接收队列。这些是已接收并缓冲的传入字节,等待使用此连接的本地进程读取和使用它们。
  • Send-Q:发送队列。这将显示准备从发送队列发送的字节。
  • 本地地址:连接的本地端的地址详细信息。默认情况下,netstat显示地址的本地主机名,以及端口的服务名称。
  • 外部地址:连接远程端的地址和端口号。
  • 状态:本地套接字的状态。对于UDP套接字,这通常为空。见下面的状态表。

对于TCP连接,状态值可以是以下值之一:

  • 听:只有服务器端。套接字正在等待连接请求。
  • SYN-SENT:仅客户端。此套接字已发出连接请求,正在等待是否接受。
  • SYN-RECEIVED:仅服务器端。此套接字正在接受连接请求后等待连接确认。
  • 建立:服务器和客户端。服务器和客户机之间建立了工作连接,允许在两者之间传输数据。
  • FIN-WAIT-1:服务器和客户端。此套接字正在等待来自远程套接字的连接终止请求,或等待先前从该套接字发送的连接终止请求的确认。
  • FIN-WAIT-2:服务器和客户端。此套接字正在等待来自远程套接字的连接终止请求。
  • 关闭等待:服务器和客户端。此套接字正在等待本地用户的连接终止请求。
  • 关闭:服务器和客户端。此套接字正在等待来自远程套接字的连接终止请求确认。
  • LAST-ACK:服务器和客户端。此套接字正在等待它发送到远程套接字的连接终止请求的确认。
  • 等待时间:服务器和客户端。这个套接字向远程套接字发送了一个确认,让它知道它收到了远程套接字的终止请求。它现在正在等待确认是否收到了确认。
  • 关闭:没有连接,因此套接字已终止。

“Unix域”列包括:

  • Proto:这个套接字使用的协议。它将是“unix”
  • RefCnt:引用计数。连接到此套接字的附加进程数。
  • 标志:这通常被设置为ACC,表示SO\u ACCEPTON,这意味着套接字正在等待连接请求。所以W表示有数据等待读取。所以显示为N的\u NOSPACE表示没有空间将数据写入套接字(即发送缓冲区已满)。
  • 类型:插座类型。请参阅下面的类型表。
  • 状态:套接字的状态。请参见下面的状态表。
  • I节点:与此套接字关联的文件系统inode。
  • Path:到套接字的文件系统路径。

Unix域套接字类型可以是以下类型之一:

  • DGRAM:套接字正在数据报模式下使用,使用固定长度的消息。数据报既不能保证可靠、排序,也不能不被耦合。
  • 流:此套接字是流套接字。这是常见的“普通”类型的套接字连接。这些套接字的设计目的是提供可靠的分组顺序(顺序)传递。
  • RAW:此套接字正在用作原始套接字。原始套接字在OSI模型的网络级别运行,并且不从传输级别引用TCP和UDP标头。
  • RDM:此套接字位于可靠传递消息连接的一端。
  • SEQPACKET:此套接字作为一个顺序分组套接字运行,这是提供可靠、有序和未耦合的包传递的另一种手段。
  • 数据包:原始接口访问套接字。数据包套接字用于在OSI模型的设备驱动程序(即数据链路层)级别接收或发送原始数据包。

Unix域套接字状态可以是以下状态之一:

  • 空闲:此套接字未分配。
  • 侦听:此套接字正在侦听传入的连接请求。
  • 连接:此插座正在连接。
  • 已连接:已建立连接,并且套接字能够接收和传输数据。
  • 断开连接:正在终止连接。

哇,这是很多信息!许多netstat选项以某种或那样的方式优化结果,但它们不会太多地更改内容。我们来看看。

按类型列出套接字

netstat-a命令可以提供比您需要看到的更多的信息。如果您只想或需要查看TCP套接字,可以使用-t(TCP)选项将显示限制为仅显示TCP套接字。

netstat -at | less

如何在linux上使用netstat

显示量大大减少。列出的几个套接字都是TCP套接字。

如何在linux上使用netstat

-u(UDP)和-x(UNIX)选项的行为方式类似,将结果限制为命令行上指定的套接字类型。下面是正在使用的-u(UDP)选项:

netstat -au | less

如何在linux上使用netstat

仅列出UDP套接字。

如何在linux上使用netstat

按状态列出套接字

要查看处于侦听或等待状态的套接字,请使用-l(侦听)选项。

netstat -l | less

如何在linux上使用netstat

列出的套接字是处于侦听状态的套接字。

如何在linux上使用netstat

这可以与-t(TCP,-u(UDP)和-x(UNIX)选项相结合,以进一步在感兴趣的套接字上使用。让我们来查找侦听TCP套接字:

netstat -lt | less

如何在linux上使用netstat

现在,我们只看到TCP侦听套接字。

如何在linux上使用netstat

按协议列出的网络统计信息

要查看协议的统计信息,请使用-s(statistics)选项并传入-t(TCP)、-u(UDP)或-x(UNIX)选项。如果您只是单独使用-s(statistics)选项,您将看到所有协议的统计信息。让我们检查一下TCP协议的统计信息。

netstat -st | less

如何在linux上使用netstat

TCP连接的统计信息集合以较少的格式显示。

如何在linux上使用netstat

显示进程名称和PID

使用套接字查看进程的进程ID(PID)以及该进程的名称非常有用。p(程序)选项就是这样做的。让我们看看对于使用处于侦听状态的TCP套接字的进程,PIDs和进程名是什么。我们使用sudo来确保接收所有可用的信息,包括通常需要root权限的任何信息。

sudo netstat -p -at

如何在linux上使用netstat

以下是格式化表中的输出:

Active Internet connecti*** (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name 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 localhost:ipp 0.0.0.0:* LISTEN 7687/cupsd tcp 0 0 localhost:**tp 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:**tp [::]:* LISTEN 1176/master

我们有一个额外的列叫做“PID/program name”,这个列列出了使用每个套接字的进程的PID和名称。

列出数字地址

我们可以采取的另一个消除歧义的步骤是将本地和远程地址显示为IP地址,而不是它们的解析域名和主机名。如果使用-n(数字)选项,IPv4地址将以点十进制格式显示:

sudo netstat -an | less

如何在linux上使用netstat

IP地址显示为数字值。还显示了端口号,用冒号“:”与IP地址隔开。

如何在linux上使用netstat

IP地址127.0.0.1表示套接字绑定到本地计算机的环回地址。您可以将IP地址0.0.0.0视为本地地址的“默认路由”,外部地址的“任意IP地址”。显示为“:”的IPv6地址也都是零地址。

可以很容易地检查列出的端口,以了解其通常用途:

  • 22:这是安全Shell(SSH)侦听端口。
  • 25:这是简单邮件传输协议(SMTP)侦听端口。
  • 53:这是域名系统(DNS)侦听端口。
  • 68:这是动态主机配置协议(DHCP)侦听端口。
  • 631:这是通用UNIX打印系统(CUPS)侦听端口。

相关:127.0.0.1和0.0.0.0之间有什么区别?

显示路由表

r(route)选项显示内核路由表。

sudo netstat -r

如何在linux上使用netstat

下面是整洁表格中的输出:

Kernel IP routing table Destination Gateway Genmask Flags MSS Window irtt Iface default Vigor.router 0.0.0.0 UG 0 0 0 enp0s3 link-local 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:路由的子网掩码。
  • 标志:见下面的标志表。
  • 此路由上TCP连接的默认最大段大小这是一个TCP段中可以接收的最大数据量。
  • 窗口:此路由上TCP连接的默认窗口大小,指示在接收缓冲区满之前可以传输和接收的数据包数。实际上,数据包由接收应用程序使用。
  • 初始往返时间。内核引用此值,以便对响应缓慢的远程连接的TCP参数进行动态调整。
  • Iface:网络接口,通过该路由发送的数据包从该接口传输。

标志值可以是以下值之一:

  • U:路线是向上的。
  • H:目标是一个主机,也是这个路由上唯一可能的目的地。
  • G:使用网关。
  • R:恢复动态路由的路由。
  • D:由路由守护进程动态安装。
  • M:路由守护程序在接收到Internet控制消息协议(ICMP)数据包时修改。
  • A:由自动DNS和DHCP配置文件生成器addrconf安装。
  • C:缓存条目。
  • !:拒绝路由。

查找进程使用的端口

如果我们通过grep管道传输netstat的输出,我们就可以按名称搜索进程,并标识它正在使用的端口。我们使用前面使用的-a(all)、-n(numeric)和-p(program)选项,并搜索“sshd”

sudo netstat -anp | grep "sshd"

如何在linux上使用netstat

grep找到了目标字符串,我们看到sshd守护进程正在使用端口22。

当然,我们也可以反过来做。如果我们搜索“:22”,我们可以找出哪个进程正在使用该端口(如果有的话)。

sudo netstat -anp | grep ":22"

如何在linux上使用netstat

这次grep找到“:22”目标字符串,我们看到使用这个端口的进程是sshd守护进程,进程ID 751。

列出网络接口

i(interfaces)选项将显示netstat可以发现的网络接口表。

sudo netstat -i

如何在linux上使用netstat

以下是更清晰的输出:

Kernel Interface table 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

这就是这些列的含义:

  • Iface:接口的名称。enp0s3接口是与外界的网络接口,lo接口是环回接口。环回接口允许进程使用网络协议在计算机内进行内部通信,即使计算机未连接到网络。
  • MTU:最大传输单位(MTU)。这是可以发送的最大的“数据包”。它由一个包含路由和协议标志的头、其他元数据以及实际传输的数据组成。
  • RX-OK:接收的数据包数,无错误。
  • RX-ERR:接收到的数据包数,有错误。我们希望这个越低越好。
  • RX-DRP:丢弃(即丢失)的数据包数。我们也希望这是尽可能低。
  • RX-OVR:接收时由于溢出而丢失的数据包数。这通常意味着接收缓冲区已满,无法接受更多数据,但接收到更多数据,必须丢弃。这个数字越低越好,零是完美的。
  • TX-OK:传输的数据包数,无错误。
  • RX-ERR:传输的数据包数,有错误。我们希望这是零。
  • RX-DRP:传输时丢弃的数据包数。理想情况下,这应该是零。
  • RX-OVR:传输时由于溢出而丢失的数据包数。这通常意味着发送缓冲区已满,无法接受更多数据,但更多数据已准备好传输,必须丢弃。
  • 弗莱格:旗帜。请参见下面的标志表。

这些标志表示以下内容:

  • 广播地址正在使用中。
  • L:这个接口是一个环回设备。
  • M:所有的数据包都被接收到了(也就是说,在混杂模式下)。任何东西都不会被过滤或丢弃。
  • O:此接口的地址解析协议(ARP)已关闭。
  • P:这是点对点(PPP)连接。
  • R:接口正在运行。
  • U:接口打开了。

列出多播组成员身份

简单地说,多播传输使数据包只发送一次,而不管接收者的数量如何。例如,对于像视频流这样的服务,从发送者的角度来看,这将极大地提高效率。

g(groups)选项使netstat列出每个接口上套接字的多播组成员身份。

sudo netstat -g

如何在linux上使用netstat

这些列非常简单:

  • 接口:套接字正在传输的接口的名称。
  • RefCnt:引用计数,它是附加到套接字的进程数。
  • 组:多播组的名称或标识符。

新来的孩子们

route、ip、ifconfig和ss命令可以提供netstat能够向您展示的许多内容。它们都是很棒的命令,值得一看。

我们将重点放在netstat上,因为它是普遍可用的,无论您使用的是哪种类似Unix的操作系统,甚至是不太熟悉的操作系统。

  • 发表于 2021-04-14 19:17
  • 阅读 ( 172 )
  • 分类:互联网

你可能感兴趣的文章

关于javarmi注册中心以及如何使用它的所有内容

... 使用netstat命令检查指定端口上是否确实存在侦听器: ...

  • 发布于 2021-03-12 15:58
  • 阅读 ( 312 )

在linux上保护隐私的10大技巧

... netstat -lt ...

  • 发布于 2021-03-13 08:16
  • 阅读 ( 430 )

4您应该注意的linux安全问题

...僵尸的僵尸客户端。 使用包嗅探器(例如netstat)来检测指向同一个未识别地址的传出流量。 ...

  • 发布于 2021-03-15 15:54
  • 阅读 ( 184 )

如何在linux上安装和使用powershell

... 在本文中,我将向您展示如何在Linux上安装、运行和使用PowerShell! ...

  • 发布于 2021-03-16 02:34
  • 阅读 ( 308 )

什么在占用我的带宽?监视家庭网络使用的5个技巧

... 4使用netstat发现网络问题 ...

  • 发布于 2021-03-18 05:41
  • 阅读 ( 430 )

如何在windows10上获得linux bash shell

... 如何在windows10上安装linux bash shell ...

  • 发布于 2021-03-21 11:48
  • 阅读 ( 288 )

关于linux最常见的问题。。。回答

...也是免费的。不仅如此,你还可以自由地看看这些程序是如何**的。如果您有专业知识,您可以使用此代码创建自己的软件。 ...

  • 发布于 2021-03-25 12:19
  • 阅读 ( 195 )

windows10的新bashshell所能做的一切

...些指南汇总到一个大列表中。 windows上linux入门 相关:如何在windows10上安装和使用Linux Bash Shell 您可以在任何版本的windows10(包括windows10home)上安装Linux环境和bashshell。但是,它确实需要64位版本的Windows10。您只需启用Windows Subs...

  • 发布于 2021-04-06 14:44
  • 阅读 ( 265 )

如何在windows10上安装和使用linux bash shell

...令行应用程序都能正常工作,因为这个特性并不完美。 如何在windows10上安**ash 相关:如何知道我运行的是32位还是64位Windows? 此功能在32位版本的Windows 10上不起作用,因此请确保您使用的是64位版本的Windows。无论如何,如果你...

  • 发布于 2021-04-06 16:32
  • 阅读 ( 248 )

如何在Windows10上设置默认的linux发行版

...个Linux环境,可以设置默认值并在它们之间切换。 相关:如何在windows10上安装和使用Linux Bash Shell 您可以自由地一次运行多个Linux环境,但是当您运行类似wsl.exe文件或者bash.exe启动shell,或者使用wsl[command]或bash-c[command]从Windows中...

  • 发布于 2021-04-06 16:40
  • 阅读 ( 199 )
qygib7812
qygib7812

0 篇文章

相关推荐