netstat

命令行工具

netstat是一個基於命令行界面網路實用工具,可顯示當前的網路狀態,包括傳輸控制協議層的連線狀況、路由表網路接口狀態和網路協議的統計訊息等[1]netstat命令適用於類Unix系統(如macOSLinuxSolarisBSD)、IBM OS/2Windows NT操作系統家族(如Windows XPWindows VistaWindows 7Windows 8Windows 10[2][3]

netstat
Linux運行netstat
Linux運行netstat
操作系統Unix類Unix系統IBM OS/2Microsoft WindowsReactOS
類型命令

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 XPWindows 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連接,並包含每個連接的進程IDPID)。根據PID,可在Windows任務管理器的「進程」選項卡中找到該應用程序。此參數可以與-a-n-p組合使用。如果安裝了Windows修補程序,則此參數在Windows XPWindows Server 2003Windows 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 Windowsroute 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_WAITCLOSEDESTABLISHEDFIN_WAIT_1FIN_WAIT_2LAST_ACKLISTENSYN_RECEIVEDSYN_SENDTIME_WAIT[29]

命令範例

編輯
 
macOS終端運行netstat

要僅顯示TCP或UDP協議的統計訊息,請鍵入以下命令之一[30]

netstat -sp tcp

netstat -sp udp

類Unix系統[1][3][9][31][32]

顯示進程ID為「pid」的進程打開的所有端口:

netstat -aop | grep "pid"

持續更新活動中的TCP和UDP連接,但主機地址和端口號以數字形式表示,並顯示哪些進程正在使用這些連接:

sudo netstat -nutpacw

Microsoft Windows[14]

顯示活動的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 -eipconfig的輸出結果類似。
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. ^ 1.0 1.1 1.2 netstat Command Usage on Linux. Geekflare. 2015-02-15 [2019-07-31]. (原始內容存檔於2016-04-29). 
  2. ^ 2.0 2.1 Stanek, William R. Windows Command-Line Administrator's Pocket Consultant, 2nd Edition. Microsoft Press. 2008. ISBN 978-0735622623. 
  3. ^ 3.0 3.1 3.2 20 Netstat Commands for Linux Network Management. [2019-07-31]. (原始內容存檔於2019-06-22). 
  4. ^ 4.0 4.1 Show Network Errors with netstat. Unix Tutorial. 2019-01-31 [2019-07-31]. (原始內容存檔於2019-10-18). 
  5. ^ IBM Systems Information Center. ibm.com. [2020-09-26]. (原始內容存檔於2019-10-18). 
  6. ^ 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. ^ 7.0 7.1 netstat(8) - Linux man page. linux.die.net. [2019-07-31]. (原始內容存檔於2019-05-30). 
  8. ^ 8.0 8.1 Mutai, Josphat. netstat vs ss usage guide on Linux. 2018-01-17 [2019-07-31]. (原始內容存檔於2018-10-08). 
  9. ^ 9.0 9.1 9.2 networking:net-tools [Wiki]. wiki.linuxfoundation.org. [2019-07-31]. (原始內容存檔於2018-10-21). 
  10. ^ net-tools. linuxfoundation.org. [2019-07-31]. (原始內容存檔於2016-06-11). 
  11. ^ Arch Linux. archlinux.org. 2011-06-08 [2019-07-31]. (原始內容存檔於2019-07-22). 
  12. ^ Deprecated Linux networking commands and their replacements. Doug Vitale Tech Blog. [2019-07-31]. (原始內容存檔於2019-06-29). 
  13. ^ 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. ^ 14.0 14.1 LLC), Tara Meyer (Aquent. Netstat: TCP/IP. docs.microsoft.com. [2019-07-31]. (原始內容存檔於2019-10-18). 
  15. ^ ReactOS: base/applications/network/netstat/netstat.c Source File. doxygen.reactos.org. [2019-07-31]. (原始內容存檔於2019-10-18). 
  16. ^ 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). 
  17. ^ hb. Mac OS X: List listening ports and programs using netstat. 2013-07-31 [2019-07-31]. (原始內容存檔於2017-07-13). 
  18. ^ netstat - Mac OS X in a Nutshell [Book]. www.oreilly.com. [2019-07-31]. (原始內容存檔於2019-10-18). 
  19. ^ netstat(1) - OpenBSD manual pages. man.openbsd.org. [2019-07-31]. (原始內容存檔於2019-05-07). 
  20. ^ how to gather network information on netbsd. wiki.netbsd.org. [2019-07-31]. (原始內容存檔於2018-01-11). 
  21. ^ netstat(1) - NetBSD Manual Pages. netbsd.gw.com. [失效連結]
  22. ^ netstat(1). www.freebsd.org. [2019-07-31]. (原始內容存檔於2018-12-22). 
  23. ^ Synopsis - man pages section 1M: System Administration Commands. docs.oracle.com. [2019-07-31]. (原始內容存檔於2014-02-15). 
  24. ^ Dyson, Peter. Mastering OS/2 Warp. Sybex. 1995. ISBN 978-0782116632. 
  25. ^ 25.0 25.1 IBM Knowledge Center. www.ibm.com. [2019-08-04]. (原始內容存檔於2019-08-04). 
  26. ^ Network Administration: The netstat Command. [2019-07-31]. (原始內容存檔於2018-06-16). 
  27. ^ How to check if port is in use on Linux or Unix. 2016-11-10 [2019-07-31]. (原始內容存檔於2019-06-20). 
  28. ^ Determining If You are Actively Being Compromised. TechGenix. 2011-02-09 [2019-07-31]. (原始內容存檔於2018-10-05). 
  29. ^ Postel, J. Transmission Control Protocol. tools.ietf.org. [2019-07-31]. (原始內容存檔於2019-01-02). 
  30. ^ Linux Howtos: Network -> Using netstat. www.linuxhowtos.org. [2019-07-31]. (原始內容存檔於2018-10-09). 
  31. ^ networking - How to know which ports are listened by certain PID?. Unix & Linux Stack Exchange. [2019-07-31]. (原始內容存檔於2019-10-18). 
  32. ^ Rackspace Support Documentation. support.rackspace.com. [2019-08-04]. (原始內容存檔於2019-08-04). 
  33. ^ 33.0 33.1 G.4. netstat. linux-ip.net. [2019-07-31]. (原始內容存檔於2018-10-03). 
  34. ^ 34.0 34.1 Ferguson, Bill. Network+ Fast Pass. John Wiley & Sons. 2006-02-20 –透過Google Books. 
  35. ^ Viewing statistics of all active TCP connections. library.netapp.com. [2019-07-31]. (原始內容存檔於2019-07-31). 

外部連結

編輯