热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

netstat竟然还能这么玩儿?

一次摸鱼的机会,看到群里小伙伴问了一嘴netstat-tnpl这个命令是干啥的,这个命令用过很多,但是我其实也没有认真研究过,但是这是一个问题,我不能放过它,而且netstat这个

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

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

Linux 下的 netstat 命令

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

image-20220114192905308

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

官方给我们的解释就是

netstat -- show network status

列出网络状态

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

image-20220114191156926

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

image-20220114210858771

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

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

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

image-20220114213625117

netstat 参数释义

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

netstat -a

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

image-20220114215136010

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

netstat -at/-t

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

netstat -at

image-20220114222513317

netstat -t

image-20220114222526237

netstat -au/-u

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

netstat -au

image-20220114222955527

netstat -u

image-20220114223046771

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

netstat -ap

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

netstat -ap|grep '程序名'

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

image-20220117205646573

还可以直接列出端口号

netstat -ap|grep 8080

image-20220117210019303

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

netstat -l

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

image-20220114223946803

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

image-20220117183747925

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

image-20220117185030035

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

image-20220117185216268

netstat -s

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

image-20220117185307357

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

image-20220117185401696

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

image-20220117185645981

netstat -p

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

image-20220117185913422

netstat -c

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

image-20220117190501847

netstat -r

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

image-20220117190549020

netstat --verbose

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

image-20220117191102190

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

netstat -i

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

image-20220117192723454

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

image-20220117193432779

关于这个问题

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

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

我们执行一下这个命令。

image-20220117214326520

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

原文链接:netstat 还能这么玩儿?

如果这篇文章对你有帮助,希望点赞并关注一下哦!


推荐阅读
  • SecureCRT是一款功能强大的终端仿真软件,支持SSH1和SSH2协议,适用于在Windows环境下高效连接和管理Linux服务器。该工具不仅提供了稳定的连接性能,还具备丰富的配置选项,能够满足不同用户的需求。通过SecureCRT,用户可以轻松实现对远程Linux系统的安全访问和操作。 ... [详细]
  • centos 7.0 lnmp成功安装过程(很乱)
    下载nginx[rootlocalhostsrc]#wgethttp:nginx.orgdownloadnginx-1.7.9.tar.gz--2015-01-2412:55:2 ... [详细]
  • 我有一个从C项目编译的.o文件,该文件引用了名为init_static_pool ... [详细]
  • 在 CentOS 6.4 上安装 QT5 并启动 Qt Creator 时,可能会遇到缺少 GLIBCXX_3.4.15 的问题。这是由于系统中的 libstdc++.so.6 版本过低。本文将详细介绍如何通过更新 GCC 版本来解决这一问题。 ... [详细]
  • 在Linux系统中避免安装MySQL的简易指南
    在Linux系统中避免安装MySQL的简易指南 ... [详细]
  • 本文介绍了如何利用Shell脚本高效地部署MHA(MySQL High Availability)高可用集群。通过详细的脚本编写和配置示例,展示了自动化部署过程中的关键步骤和注意事项。该方法不仅简化了集群的部署流程,还提高了系统的稳定性和可用性。 ... [详细]
  • 在深入探讨进程间通信技术时,本文重点解析了描述符传递的方法。通过详细分析发送和接收描述符的过程,文章首先介绍了发送描述符的具体步骤,并提供了相关函数原型。此外,还讨论了如何高效地在不同进程之间传输文件描述符,以实现资源的共享和同步。这一技术在多进程应用中具有重要意义,能够显著提升系统的性能和可靠性。 ... [详细]
  • 本文详细介绍了定时器输入捕捉技术的原理及其应用。通过配置定时器通道的引脚模式为输入模式,并设置相应的捕获触发条件,可以实现对外部信号的精确捕捉。该技术在实时控制系统中具有广泛的应用,如电机控制、频率测量等场景。文中还提供了具体的配置步骤和示例代码,帮助读者更好地理解和应用这一技术。 ... [详细]
  • 在 CentOS 6.5 系统上部署 VNC 服务器的详细步骤与配置指南
    在 CentOS 6.5 系统上部署 VNC 服务器时,首先需要确认 VNC 服务是否已安装。通常情况下,VNC 服务默认未安装。可以通过运行特定的查询命令来检查其安装状态。如果查询结果为空,则表明 VNC 服务尚未安装,需进行手动安装。此外,建议在安装前确保系统的软件包管理器已更新至最新版本,以避免兼容性问题。 ... [详细]
  • Docker 环境下 MySQL 双主同步配置指南
    本文介绍了如何在 Docker 环境中配置 MySQL 的双主同步,包括目录结构的创建、配置文件的编写、容器的创建与设置以及最终的验证步骤。 ... [详细]
  • 如何在Linux服务器上配置MySQL和Tomcat的开机自动启动
    在Linux服务器上部署Web项目时,通常需要确保MySQL和Tomcat服务能够随系统启动而自动运行。本文将详细介绍如何在Linux环境中配置MySQL和Tomcat的开机自启动,以确保服务的稳定性和可靠性。通过合理的配置,可以有效避免因服务未启动而导致的项目故障。 ... [详细]
  • 本文探讨了如何通过编程手段在Linux系统中禁用硬件预取功能。基于Intel® Core™微架构的应用性能优化需求,文章详细介绍了相关配置方法和代码实现,旨在帮助开发人员有效控制硬件预取行为,提升应用程序的运行效率。 ... [详细]
  • 为了在Hadoop 2.7.2中实现对Snappy压缩和解压功能的原生支持,本文详细介绍了如何重新编译Hadoop源代码,并优化其Native编译过程。通过这一优化,可以显著提升数据处理的效率和性能。此外,还探讨了编译过程中可能遇到的问题及其解决方案,为用户提供了一套完整的操作指南。 ... [详细]
  • Parallels Desktop for Mac 是一款功能强大的虚拟化软件,能够在不重启的情况下实现在同一台电脑上无缝切换和使用 Windows 和 macOS 系统中的各种应用程序。该软件不仅提供了高效稳定的性能,还支持多种高级功能,如拖放文件、共享剪贴板等,极大地提升了用户的生产力和使用体验。 ... [详细]
  • 在本地环境中部署了两个不同版本的 Flink 集群,分别为 1.9.1 和 1.9.2。近期在尝试启动 1.9.1 版本的 Flink 任务时,遇到了 TaskExecutor 启动失败的问题。尽管 TaskManager 日志显示正常,但任务仍无法成功启动。经过详细分析,发现该问题是由 Kafka 版本不兼容引起的。通过调整 Kafka 客户端配置并升级相关依赖,最终成功解决了这一故障。 ... [详细]
author-avatar
小白石
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有