netstat
netstat
是一个基于命令行界面的网络实用工具,可显示当前的网络状态,包括传输控制协议层的连线状况、路由表、网络接口状态和网络协议的统计消息等[1]。netstat
命令适用于类Unix系统(如macOS、Linux、Solaris和BSD)、IBM OS/2和Windows NT操作系统家族(如Windows XP、Windows Vista、Windows 7、Windows 8和Windows 10)[2][3]。
操作系统 | Unix和类Unix系统、IBM OS/2、Microsoft Windows、ReactOS |
---|---|
类型 | 命令 |
netstat
可用于查找网络中的问题,并可通过计算网络流量来度量网络性能[4][5]。尽管该工具仍然被包含在许多Linux发行版中,但基本都被看作过时、应被替代的工具[6][7][8][9]。
在Linux上,推荐使用ss
替代netstat
,使用ip route
替代netstat -r
,使用ip -s link
替代netstat -i
,使用ip maddr
替代netstat -g
[10][11][12][13]。
命令参数
命令netstat
的参数必须以连字符(-)而非斜杠(/)为前缀。并非所有平台都支持某些参数[1]。
参数 | 描述 | Windows [2][14] |
ReactOS [15] |
macOS [16][17][18] |
BSD [19] |
NetBSD [20][21] |
FreeBSD [22] |
Linux [3][7][8] |
Solaris [23] |
OS/2 [24][25] |
---|---|---|---|---|---|---|---|---|---|---|
-a | 显示所有活动中的网络连接和电脑正在监听的TCP/UDP端口。 | 是 | 是 | 是 | ||||||
-b | 显示每个应用程序所使用的网络连接和监听端口 。(仅适用于Windows XP、Windows Server 2003或更高版本的Microsoft Windows操作系统,Windows 2000或更早版本不可用。) | 是 | 否 | 否 | ||||||
-b | 同-i,但计算网络流量的总字节数。 | 否 | 是 | 是 | 否 | |||||
-e | 显示以太网统计消息,例如发送和接收的字节数及数据包数。此参数可以与-s组合使用。 | 是 | 是 | 否 | ||||||
-f | 显示外部地址的完整网域名称。(仅适用于Windows Vista和更高版本的Microsoft Windows操作系统。) | 是 | 否 | 否 | ||||||
-f | 限定显示使用特定套接字(unix、inet、inet6)的地址族。 | 否 | 是 | 否 | ||||||
-g | 显示多播组消息。(可能仅适用于较新的操作系统。) | 否 | 否 | 是 | ||||||
-i | 显示网络接口及统计消息。 | 否 | 否 | 是 | ||||||
-m | 显示随机存取存储器统计消息。 | 否 | 否 | |||||||
-n | 显示活动中的TCP连接,但主机地址和端口号以数字形式表示,不会尝试确定实际主机名。 | 是 | 是 | 是 | ||||||
-o | 显示活动中的TCP连接,并包含每个连接的进程ID(PID)。根据PID,可在Windows任务管理器的“进程”选项卡中找到该应用程序。此参数可以与-a、-n和-p组合使用。如果安装了Windows修补程序,则此参数在Windows XP、Windows Server 2003和Windows 2000上可用。 | 是 | 否 | 否 | ||||||
-p | 显示使用指定网络协议的连接。协议可以是TCP、UDP、TCPv6或UDPv6。如果此参数与-s组合使用,则协议可以是TCP、UDP、ICMP、IP、TCPv6、UDPv6、ICMPv6或IPv6。 | 是 | 是 | 是 | ||||||
-p | 显示哪些进程正在使用哪些网络接口,类似于Microsoft Windows下的-b。(需要root权限才能执行此操作。) | 否 | 否 | 是 | ||||||
-P | 显示使用指定网络协议的连接。协议可以是IP、IPv6、ICMP、ICMPv6、IGMP、UDP、TCP或RawIP。 | 否 | 否 | 是 | ||||||
-r | 显示路由表内容,与Microsoft Windows下route print 命令相同。
|
是 | 是 | 是 | 是 | |||||
-s | 按网络协议显示统计消息。默认情况下,显示TCP、UDP、ICMP和IP协议的统计消息。如果Windows XP安装了IPv6协议,亦可以显示TCPv6、UDPv6、ICMPv6和IPv6协议的统计消息。-p参数可用于指定一组协议。 | 是 | 是 | 是 | ||||||
-t | 仅显示TCP连接。 | 否 | 是 | 是 | ||||||
-u | 仅显示UDP连接。 | 否 | 否 | 是 | 是 | |||||
-W | 显示完整主机名或IPv6地址。 | 否 | 否 | 是 | 否 | |||||
-v | 与-b组合使用时,将显示所有应用程序使用的网络连接和监听端口所涉及的组件列表。 | 是 | 否 | 否 | ||||||
-h | 显示该命令的提示。 | 否 | 否 | 是 | 是 | 是 | 是 | 是 | 是 | 否 |
-? | 显示该命令的提示。 | 否 | 否 | 否 | 否 | 否 | 否 | 否 | 否 | 是 |
/? | 显示该命令的提示。 | 是 | 是 | 否 | 否 | 否 | 否 | 否 | 否 | 否 |
统计消息
- Proto:网络协议,包括传输控制协议(TCP)和用户数据报协议(UDP)[26]。
- Local Address:本地计算机的IP地址和正在使用的端口号。除非使用-n参数,否则将显示与IP地址和端口对应的主机名称。如果主机正在侦听所有端口,则主机名显示为星号(*)。如果端口尚未建立,则端口号显示为星号[27]。
- Foreign Address:远程计算机的IP地址和正在使用的端口号。除非指定了-n参数,否则将显示与IP地址和端口对应的主机名称。如果端口尚未建立,则端口号显示为星号(*)[28]。
- State:TCP连接的状态,可能的状态包括CLOSE_WAIT、CLOSED、ESTABLISHED、FIN_WAIT_1、FIN_WAIT_2、LAST_ACK、LISTEN、SYN_RECEIVED、SYN_SEND和TIME_WAIT[29]。
命令范例
要仅显示TCP或UDP协议的统计消息,请键入以下命令之一[30]:
netstat -sp tcp
netstat -sp udp
- 显示进程ID为“pid”的进程打开的所有端口:
netstat -aop | grep "pid"
- 持续更新活动中的TCP和UDP连接,但主机地址和端口号以数字形式表示,并显示哪些进程正在使用这些连接:
sudo netstat -nutpacw
- 显示活动的TCP连接和关联的进程ID,每5秒为一个更新周期(仅适用于基于Windows NT的操作系统或装有修补程序的Windows 2000):
netstat -o 5
- 显示活动中的TCP连接和关联的进程ID,但主机地址和端口号以数字形式表示(仅适用于基于Windows NT的操作系统或装有修补程序的Windows 2000):
netstat -no
应用(类UNIX系统)
命令 | 说明[4][9] |
---|---|
netstat -a |
显示所有端口(无论被监听或不被监听)、所有网络协议的连接。 |
netstat -at |
仅显示TCP连接。 |
netstat -au |
仅显示UDP连接。 |
netstat -ant |
显示所有TCP连接,但不进行域名解析(即显示IP地址而不显示主机名)。 |
netstat -al |
显示所有被监听的端口。 |
sudo netstat -aep |
同时显示每个端口相关的进程和进程ID(需要root权限以运行此命令)。 |
netstat -s > wiki.txt |
输出当前计算机网络统计消息到文本文件wiki.txt 。
|
netstat -r |
显示路由表。与route -e 的输出结果相同。
|
netstat -i |
显示所有网络接口。netstat -i -e 与ipconfig 的输出结果类似。
|
netstat -ct |
显示TCP连接(持续更新)。 |
netstat -g
|
显示多播组消息。 |
netstat -lntu
|
显示所有监听端口的守护进程和本地计算机上所有空闲的开放端口。 |
netstat -atnp | grep ESTA
|
显示所有状态为ESTABLISHED的TCP连接。 |
通配符
在netstat
命令的输出结果中,星号(*)为通配符,表示“所有”[33][34]。
例如:
....Local Address Foreign Address State
... *:smtp *:* LISTEN
在输出结果中,*:smtp
表示该进程正在本地计算机的所有网络接口上监听所有映射为SMTP的端口,此处的星号有时会被0.0.0.0代替,意义不改变。*:*
中的第一个星号表示连接可以来自任何IP地址,第二个星号表示连接可以来自远程计算机上的任何端口[25][33][34][35]。
参考文献
- ^ 1.0 1.1 1.2 netstat Command Usage on Linux. Geekflare. 2015-02-15 [2019-07-31]. (原始内容存档于2016-04-29).
- ^ 2.0 2.1 Stanek, William R. Windows Command-Line Administrator's Pocket Consultant, 2nd Edition. Microsoft Press. 2008. ISBN 978-0735622623.
- ^ 3.0 3.1 3.2 20 Netstat Commands for Linux Network Management. [2019-07-31]. (原始内容存档于2019-06-22).
- ^ 4.0 4.1 Show Network Errors with netstat. Unix Tutorial. 2019-01-31 [2019-07-31]. (原始内容存档于2019-10-18).
- ^ IBM Systems Information Center. ibm.com. [2020-09-26]. (原始内容存档于2019-10-18).
- ^ There Are Real Reasons For Linux To Replace ifconfig, netstat and Other Classic Tools - Slashdot. linux.slashdot.org. [2019-07-31]. (原始内容存档于2019-06-01).
- ^ 7.0 7.1 netstat(8) - Linux man page. linux.die.net. [2019-07-31]. (原始内容存档于2019-05-30).
- ^ 8.0 8.1 Mutai, Josphat. netstat vs ss usage guide on Linux. 2018-01-17 [2019-07-31]. (原始内容存档于2018-10-08).
- ^ 9.0 9.1 9.2 networking:net-tools [Wiki]. wiki.linuxfoundation.org. [2019-07-31]. (原始内容存档于2018-10-21).
- ^ net-tools. linuxfoundation.org. [2019-07-31]. (原始内容存档于2016-06-11).
- ^ Arch Linux. archlinux.org. 2011-06-08 [2019-07-31]. (原始内容存档于2019-07-22).
- ^ Deprecated Linux networking commands and their replacements. Doug Vitale Tech Blog. [2019-07-31]. (原始内容存档于2019-06-29).
- ^ netstat man page (notes section). [2014-08-02]. (原始内容存档于2019-02-17).
This program is obsolete. Replacement for netstat is ss. Replacement for netstat -r is ip route. Replacement for netstat -i is ip -s link. Replacement for netstat -g is ip maddr.
- ^ 14.0 14.1 LLC), Tara Meyer (Aquent. Netstat: TCP/IP. docs.microsoft.com. [2019-07-31]. (原始内容存档于2019-10-18).
- ^ ReactOS: base/applications/network/netstat/netstat.c Source File. doxygen.reactos.org. [2019-07-31]. (原始内容存档于2019-10-18).
- ^ Alex; Alex, er Fox; AppleGazette, er Fox is a freelance tech writer who loves translating tech for consumers His work appears in; MakeTechEasier; SpyreStudios. How to Use the Netstat Command on Mac. Lifewire. [2019-07-31]. (原始内容存档于2021-11-26).
- ^ hb. Mac OS X: List listening ports and programs using netstat. 2013-07-31 [2019-07-31]. (原始内容存档于2017-07-13).
- ^ netstat - Mac OS X in a Nutshell [Book]. www.oreilly.com. [2019-07-31]. (原始内容存档于2019-10-18).
- ^ netstat(1) - OpenBSD manual pages. man.openbsd.org. [2019-07-31]. (原始内容存档于2019-05-07).
- ^ how to gather network information on netbsd. wiki.netbsd.org. [2019-07-31]. (原始内容存档于2018-01-11).
- ^ netstat(1) - NetBSD Manual Pages. netbsd.gw.com.[失效链接]
- ^ netstat(1). www.freebsd.org. [2019-07-31]. (原始内容存档于2018-12-22).
- ^ Synopsis - man pages section 1M: System Administration Commands. docs.oracle.com. [2019-07-31]. (原始内容存档于2014-02-15).
- ^ Dyson, Peter. Mastering OS/2 Warp. Sybex. 1995. ISBN 978-0782116632.
- ^ 25.0 25.1 IBM Knowledge Center. www.ibm.com. [2019-08-04]. (原始内容存档于2019-08-04).
- ^ Network Administration: The netstat Command. [2019-07-31]. (原始内容存档于2018-06-16).
- ^ How to check if port is in use on Linux or Unix. 2016-11-10 [2019-07-31]. (原始内容存档于2019-06-20).
- ^ Determining If You are Actively Being Compromised. TechGenix. 2011-02-09 [2019-07-31]. (原始内容存档于2018-10-05).
- ^ Postel, J. Transmission Control Protocol. tools.ietf.org. [2019-07-31]. (原始内容存档于2019-01-02).
- ^ Linux Howtos: Network -> Using netstat. www.linuxhowtos.org. [2019-07-31]. (原始内容存档于2018-10-09).
- ^ networking - How to know which ports are listened by certain PID?. Unix & Linux Stack Exchange. [2019-07-31]. (原始内容存档于2019-10-18).
- ^ Rackspace Support Documentation. support.rackspace.com. [2019-08-04]. (原始内容存档于2019-08-04).
- ^ 33.0 33.1 G.4. netstat. linux-ip.net. [2019-07-31]. (原始内容存档于2018-10-03).
- ^ 34.0 34.1 Ferguson, Bill. Network+ Fast Pass. John Wiley & Sons. 2006-02-20 –通过Google Books.
- ^ Viewing statistics of all active TCP connections. library.netapp.com. [2019-07-31]. (原始内容存档于2019-07-31).