Linux netstat命令为您提供了有关网络连接、正在使用的端口以及使用它们的进程的信息宝库。学习如何使用它。
可以连接网络套接字,也可以等待连接。连接使用网络协议,如传输控制协议(TCP)或用户数据报协议UDP。他们使用互联网协议地址和网络端口建立连接。
sockets一词可能会让人联想到导线或电缆的物理连接点,但在本文中,socket是一种用于处理网络数据连接一端的软件结构。
套接字有两种主要状态:它们要么已连接并促进正在进行的网络通信,要么正在等待传入连接连接到它们。还有其他一些状态,例如套接字在远程设备上建立连接的过程中处于中间状态,但抛开瞬时状态不谈,可以将套接字视为正在连接或正在等待(通常称为侦听)。
侦听套接字称为服务器,请求与侦听套接字连接的套接字称为客户机。这些名称与硬件或计算机角色无关。它们只是在连接的每一端定义每个套接字的角色。
netstat命令允许您发现哪些套接字已连接,哪些套接字正在侦听。也就是说,它告诉您哪些端口正在使用,哪些进程正在使用它们。它可以显示路由表和有关网络接口和多播连接的统计信息。
netstat的功能随着时间的推移在不同的Linux实用程序中得到了复制,比如ip和ss。这仍然是值得了解的所有网络分析命令,因为它是所有Linux和Unix操作系统,甚至在Windows和Mac。
下面是如何使用它,并附有示例命令。
-a(all)选项使netstat显示所有连接的和等待的套接字。这个命令可能会产生一个很长的列表,所以我们将它导入较少的列表中。
netstat -a | less清单包括TCP(IP)、TCP6(IPv6)和UDP套接字。
终端窗口中的环绕使得看到正在发生的事情有点困难。下面是该列表中的几个部分:
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”列包括:
对于TCP连接,状态值可以是以下值之一:
“Unix域”列包括:
Unix域套接字类型可以是以下类型之一:
Unix域套接字状态可以是以下状态之一:
哇,这是很多信息!许多netstat选项以某种或那样的方式优化结果,但它们不会太多地更改内容。我们来看看。
netstat-a命令可以提供比您需要看到的更多的信息。如果您只想或需要查看TCP套接字,可以使用-t(TCP)选项将显示限制为仅显示TCP套接字。
netstat -at | less显示量大大减少。列出的几个套接字都是TCP套接字。
-u(UDP)和-x(UNIX)选项的行为方式类似,将结果限制为命令行上指定的套接字类型。下面是正在使用的-u(UDP)选项:
netstat -au | less仅列出UDP套接字。
要查看处于侦听或等待状态的套接字,请使用-l(侦听)选项。
netstat -l | less列出的套接字是处于侦听状态的套接字。
这可以与-t(TCP,-u(UDP)和-x(UNIX)选项相结合,以进一步在感兴趣的套接字上使用。让我们来查找侦听TCP套接字:
netstat -lt | less现在,我们只看到TCP侦听套接字。
要查看协议的统计信息,请使用-s(statistics)选项并传入-t(TCP)、-u(UDP)或-x(UNIX)选项。如果您只是单独使用-s(statistics)选项,您将看到所有协议的统计信息。让我们检查一下TCP协议的统计信息。
netstat -st | lessTCP连接的统计信息集合以较少的格式显示。
使用套接字查看进程的进程ID(PID)以及该进程的名称非常有用。p(程序)选项就是这样做的。让我们看看对于使用处于侦听状态的TCP套接字的进程,PIDs和进程名是什么。我们使用sudo来确保接收所有可用的信息,包括通常需要root权限的任何信息。
sudo netstat -p -at以下是格式化表中的输出:
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 | lessIP地址显示为数字值。还显示了端口号,用冒号“:”与IP地址隔开。
IP地址127.0.0.1表示套接字绑定到本地计算机的环回地址。您可以将IP地址0.0.0.0视为本地地址的“默认路由”,外部地址的“任意IP地址”。显示为“:”的IPv6地址也都是零地址。
可以很容易地检查列出的端口,以了解其通常用途:
相关:127.0.0.1和0.0.0.0之间有什么区别?
r(route)选项显示内核路由表。
sudo netstat -r下面是整洁表格中的输出:
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下面是这些列的含义:
标志值可以是以下值之一:
如果我们通过grep管道传输netstat的输出,我们就可以按名称搜索进程,并标识它正在使用的端口。我们使用前面使用的-a(all)、-n(numeric)和-p(program)选项,并搜索“sshd”
sudo netstat -anp | grep "sshd"grep找到了目标字符串,我们看到sshd守护进程正在使用端口22。
当然,我们也可以反过来做。如果我们搜索“:22”,我们可以找出哪个进程正在使用该端口(如果有的话)。
sudo netstat -anp | grep ":22"这次grep找到“:22”目标字符串,我们看到使用这个端口的进程是sshd守护进程,进程ID 751。
i(interfaces)选项将显示netstat可以发现的网络接口表。
sudo netstat -i以下是更清晰的输出:
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这就是这些列的含义:
这些标志表示以下内容:
简单地说,多播传输使数据包只发送一次,而不管接收者的数量如何。例如,对于像视频流这样的服务,从发送者的角度来看,这将极大地提高效率。
g(groups)选项使netstat列出每个接口上套接字的多播组成员身份。
sudo netstat -g这些列非常简单:
route、ip、ifconfig和ss命令可以提供netstat能够向您展示的许多内容。它们都是很棒的命令,值得一看。
我们将重点放在netstat上,因为它是普遍可用的,无论您使用的是哪种类似Unix的操作系统,甚至是不太熟悉的操作系统。
...僵尸的僵尸客户端。 使用包嗅探器(例如netstat)来检测指向同一个未识别地址的传出流量。 ...
... 在本文中,我将向您展示如何在Linux上安装、运行和使用PowerShell! ...
... 如何在windows10上安装linux bash shell ...
...也是免费的。不仅如此,你还可以自由地看看这些程序是如何**的。如果您有专业知识,您可以使用此代码创建自己的软件。 ...
...些指南汇总到一个大列表中。 windows上linux入门 相关:如何在windows10上安装和使用Linux Bash Shell 您可以在任何版本的windows10(包括windows10home)上安装Linux环境和bashshell。但是,它确实需要64位版本的Windows10。您只需启用Windows Subs...
...令行应用程序都能正常工作,因为这个特性并不完美。 如何在windows10上安**ash 相关:如何知道我运行的是32位还是64位Windows? 此功能在32位版本的Windows 10上不起作用,因此请确保您使用的是64位版本的Windows。无论如何,如果你...
...个Linux环境,可以设置默认值并在它们之间切换。 相关:如何在windows10上安装和使用Linux Bash Shell 您可以自由地一次运行多个Linux环境,但是当您运行类似wsl.exe文件或者bash.exe启动shell,或者使用wsl[command]或bash-c[command]从Windows中...