netstat 还能这么玩儿?

简介: 一次摸鱼的机会,看到群里小伙伴问了一嘴 netstat -tnpl 这个命令是干啥的,netstat 这个命令用过很多次,但是我其实也没有认真研究,但是这是一个问题,我不能放过它,而且 netstat 这个命令我日常就用来查询端口的监听状态了,所以趁着这次机会,一起搞懂 netstat 这个命令。

一次摸鱼的机会,看到群里小伙伴问了一嘴 netstat -tnpl 这个命令是干啥的,netstat 这个命令用过很多次,但是我其实也没有认真研究,但是这是一个问题,我不能放过它,而且 netstat 这个命令我日常就用来查询端口的监听状态了,所以趁着这次机会,一起搞懂 netstat 这个命令。

netstat 这个命令在 Linux 、Windows 和 MacOS 操作系统下都兼容,不同的是,netstat 在 UNIX 下显示详细信息的命令是 man netstat ,而在 Linux 和 Windows 下面是 netstat --help

Linux 下的 netstat 命令

当我在 Linux 下执行 man netstat 命令之后,系统显示出来的提示着实让我吓一大跳,看来这个命令内容很多啊!不要被这么长的描述吓到,我们一步一步来。

微信图片_20220417162844.jpg

首先来了解一下 netstat 这个命令是干啥的。

官方给我们的解释就是

netstat -- show network status

列出网络状态

但是这网络状态都有啥呢?带着疑问,我在 Linux 下执行了一下。

微信图片_20220417162849.jpg

打印出来是一个六元组,六元组每一列的内容分别是

image.gif

仔细看了一下这个六元组,这好像表明 netstat 这个命令是用于监控传入和传出的网络连接和状态的一个命令行工具啊

从整体上来看,netstst 的输出结果可以分为两部分,一部分是 Active Internet connections,称为活跃 TCP 连接,其中的 Recv-Q 和 Send-Q 指的是客户端发送队列和客户端接收队列。这两个队列的值一般都是 0 ,如果不是 0 的话表示有消息堆积还没有发出去/取出,这种情况一般很少见到。

另外一部分是 Active UNIX domain sockets, 称为 活跃的 Unix 域套接字,这部分中的 socket 和网络 socket 套接字一样,不同的是,这块只能用来本地通信,性能要比网络 socket 高。Active UNIX domain sockets 也是一个六元组,分别表示

微信图片_20220417162852.jpg

netstat 参数释义

下面我们来解释一下 netstat --help 列出来的一些参数,我们从最常见的一些参数开始入手,这样大家看起来也能形成阶段性记忆,不至于失去重点。

netstat -a

-a 这个参数默认会监控所有的 socket 连接。

微信图片_20220417162856.jpg

包括已经监听的、已经建立连接的、客户端发送的等待服务器的和未被监听都会被列出来。

netstat -at/-t

netstat -atnetstat -t 这俩后缀都是用来监听与 TCP 协议有关的端口,不同的是 netstat -at 会监听所有 State(状态)下的端口,而 netstat -t 仅仅会监听 ESTABLISHED 状态的端口。

netstat -at

微信图片_20220417162859.jpg

netstat -t

微信图片_20220417162903.jpg

netstat -au/-u

同样的,netstat -aunetstat -u 都会监控与 UDP 有关的端口,不同的是 netstat -au 会监听所有 State(状态)下的端口,而 netstat -u 仅仅会监听 ESTABLISHED 状态的端口。

netstat -au

微信图片_20220417162906.jpg

netstat -u

微信图片_20220417162910.jpg

我这里测试是没有监控已经建立连接状态下的 UDP 协议。

netstat -ap

这条命令用于列出程序运行的端口,常用的命令是

netstat -ap|grep '程序名'

比如我们要找 http 程序,就是 Netstat -ap|grep http

微信图片_20220417162913.jpg

还可以直接列出端口号

netstat -ap|grep 8080

微信图片_20220417162917.jpg

不过需要注意下,并不是所有的程序都能被找到,没有权限的不会显示,使用 root 权限可以查询所有信息。

netstat -l

netstat -l 用于监听正在处于监听状态的端口(读起来还真有那么点费劲,为了读起来更顺畅,后面直接使用列出替换监听)。

微信图片_20220417162921.jpg

netstat -lt 只用于列出所有监听 TCP 端口。

微信图片_20220417162924.jpg

netstat -lu 只用于列出所有监听 UDP 端口。

微信图片_20220417162928.jpg

netstat -lx 只用于列出所有监听 UNIX 端口。

微信图片_20220417162930.jpg

netstat -s

netstat -s用于列出所有端口的统计信息。

微信图片_20220417162933.jpg

netstat -st用于列出 TCP 端口的统计信息。

微信图片_20220417162935.jpg

netstat -su用于列出 UDP 端口的统计信息。

微信图片_20220417162939.jpg

netstat -p

netstat -p 可以与其他参数一起使用,例如 netstat -pt 就可以列出服务名称和 PID 号。

微信图片_20220417162945.jpg

netstat -c

使用 netstat -c 将每隔一秒列出网络信息。

微信图片_20220417162948.jpg

netstat -r

netstat -r用于列出路由核心信息。

微信图片_20220417162951.jpg

netstat --verbose

这条命令会列出系统支持的地址族(Address Family)

微信图片_20220417162954.jpg

Address Family 简单来说就是底层是使用的哪种通信协议来递交数据的,如 AF_INET 用的是 TCP/IPv4;AF_INET6 使用的是 TCP/IPv6;而 AF_LOCAL 或者 AF_UNIX 则指的是本地通信(即本次通信是在当前主机上的进程间的通信),一般用绝对路径的形式来指明。

netstat -i

netstat -i 用来列出网络接口数据包,包括传输和接收具有 MTU(最大传输单元)的数据包。

微信图片_20220417162957.jpg

另外,netstat -ie 还用于列出内核接口表,和 ifconfig 命令很相似

微信图片_20220417163000.jpg

关于这个问题

所以,回到文章刚开始的那个疑问,netstat -tnpl 是干什么用的,其实这就是几个参数的组合

  • -t :仅列出与 tcp 有关的信息
  • -n:以数字形式列出
  • -p:列出正在使用 socket PID 和 程序名称
  • -l:列出正在监听的服务器 socket

我们执行一下这个命令。

微信图片_20220417163004.jpg

另外,在 Linux 中,已经推荐使用 ss 来替代 netstat ,使用 ip route 来替代 netstat -r ,使用 ip -s link 来替代 netstat -i ,使用 ip addr 来替代 netstat -g 了。

相关文章
|
2月前
|
网络协议 网络安全 数据安全/隐私保护
网工老司机最常用的11个网络命令,看你用过几个?
网工老司机最常用的11个网络命令,看你用过几个?
|
2月前
|
存储 网络协议
最最最常用的10个nslookup命令,网工看了,必藏!
最最最常用的10个nslookup命令,网工看了,必藏!
|
2月前
|
网络协议 Linux
12条tcpdump命令,腻害的网工,都爱用!
12条tcpdump命令,腻害的网工,都爱用!
|
12月前
|
XML 安全 网络协议
上帝之眼Nmap简介及命令大全
本篇文章首先对黑客常用的工具Nmap(上帝之眼)做了一个基本介绍,然后对Nmap的常用命令做了一个很详细的汇总,包括Nmap常用命令的解释说明,详情请看正文。
145 1
上帝之眼Nmap简介及命令大全
|
运维 Java Shell
shell基础、脚本设计与运行(少年没有乌托邦,心向远方自明朗)
shell基础、脚本设计与运行(少年没有乌托邦,心向远方自明朗)
153 0
shell基础、脚本设计与运行(少年没有乌托邦,心向远方自明朗)
|
监控 Unix Linux
8 个出没在 Linux 终端的诡异家伙
这篇文章,我们一起来到 Linux 的诡异的一面…… 你知道吗?在我们日常使用的 Unix(和 Linux )及其各种各样的分支系统中,存在着一些诡异的命令或进程,它们让人毛骨悚然,有些确实是有害,但也有些却是有益的。下面就来简单介绍一下这些家伙吧。
121 0
8 个出没在 Linux 终端的诡异家伙
|
应用服务中间件
没有ngrok的日子,幸好还有路由侠
没有ngrok的日子,幸好还有路由侠
164 0
没有ngrok的日子,幸好还有路由侠
|
监控 关系型数据库 Java