当前位置: 首页 > 科技观察

Netstat还能这样玩吗?

时间:2023-03-15 13:54:19 科技观察

一次钓鱼的机会,看到群里有朋友问netstat-tnpl命令是干什么的。netstat命令我用过很多次,但我并没有真正认真研究过,但这是一个问题,我不能放过它,我每天都使用netstat命令查看端口的监听状态,所以借此机会一起了解一下netstat命令。netstat命令兼容Linux、Windows和MacOS操作系统。不同的是,在UNIX下netstat显示详细信息的命令是mannetstat,而在Linux和Windows下是netstat--help。Linux下的netstat命令当我在Linux下执行mannetstat命令时,系统显示的提示着实让我吃惊。看来这条命令的内容很多啊!不要被这么长的描述吓到,让我们一步一步来。首先,让我们了解netstat命令的作用。官方给我们的解释是netstat--shownetworkstatus列出了网络状态,但是网络状态呢?带着疑惑,我在Linux下执行了。打印出来的是一个六元组,仔细看六元组每一列的内容,似乎说明netstat命令是一个监控进出网络连接和状态的命令行工具。整体来说,netstst的输出可以分为两部分,一部分是ActiveInternetconnections,称为activeTCPconnections,其中Recv-Q和Send-Q指的是客户端发送队列和客户端接收队列。这两个队列的值一般都是0,如果不为0,说明有堆积的消息没有发送/取出。这种情况一般很少见。另一部分是ActiveUNIXdomainsockets,称为活动Unix域套接字。这部分的套接字与网络套接字套接字相同。不同的是这部分只能用于本地通信,其性能比网络套接字要高。.ActiveUNIXdomainsockets也是一个六元组,分别代表netstat参数的解释。让我们解释一下netstat--help中列出的一些参数。我们从最常用的参数入手,让大家形成阶段性记忆,以免走神。netstat-a-a这个参数默认会监控所有的socket连接。包括已经监听的,已经连接的,客户端发送的等待服务端的,还没有监听的都会列出来。netstat-at/-tnetstat-at和netstat-t这两个后缀用于监控TCP协议相关的端口。不同的是,netstat-at会监听所有状态(state)的端口,而netstat-t只会监听ESTABLISHED状态的端口。netstat-atnetstat-tnetstat-au/-u同样,netstat-au和netstat-u都会监控UDP相关的端口,不同的是netstat-au会监控状态(state)的所有端口,而netstat-u只监控该端口将监听ESTABLISHED状态。netstat-aunetstat-u我这里的测试是在建立连接状态下不监听UDP协议。netstat-ap命令用于列出程序运行的端口。常用的命令是netstat-ap|grep'程序名'。比如我们要找一个http程序,就是netstat-ap|grephttp。也可以直接列出端口号netstat-ap|grep8080但是需要注意的是,并不是所有的程序都能找到,没有权限的是不会显示的。您可以使用root权限查询所有信息。netstat-lnetstat-l用于监听处于监听状态的端口(确实很难看,为了看的更顺畅,后面直接用list代替监听)。netstat-lt仅用于列出所有侦听的TCP端口。netstat-lu仅用于列出所有侦听的UDP端口。netstat-lx仅用于列出所有监听的UNIX端口。netstat-snetstat-s用于列出所有端口的统计信息。netstat-st用于列出TCP端口的统计信息。netstat-su用于列出UDP端口的统计信息。netstat-pnetstat-p可以和其他参数一起使用,比如netstat-pt可以列出服务名和PID号。netstat-c使用netstat-c将每秒列出一次网络信息。netstat-rnetstat-r用于列出路由核心信息。netstat--verbose这个命令会列出系统支持的地址族(AddressFamily)。AddressFamily简单的说就是底层使用哪种通信协议来提交数据,比如AF_INET使用TCP/IPv4;AF_INET6使用TCP/IPv6;而AF_LOCAL或AF_UNIX是指本地通信(即此时的通信是当前主机上进程之间的通信),一般以绝对路径的形式指定。netstat-inetstat-i用于列出网络接口数据包,包括传输和接收的具有MTU(最大传输单元)的数据包。此外,netstat-ie还用于列出内核接口表,这与ifconfig命令非常相似。那么,回到文章开头的问题,netstat-tnpl是干什么用的?其实这是几个参数的组合-t:只列出tcp相关的信息-n:以数字形式列出-p:列出正在使用的socketPID和程序名-l:列出正在监听的serversocket让我们执行这个命令。另外,在Linux中,已经推荐使用ss代替netstat,使用iproute代替netstat-r,使用ip-slink代替netstat-i,使用ipaddr代替netstat-g。