Netstat

`netstat`是一個基於命令行界面的網路實用工具，可顯示當前的網路狀態，包括傳輸控制協議層的連線狀況、路由表、網路接口狀態和網路協議的統計訊息等。`netstat`命令適用於類Unix系統（如macOS、Linux、Solaris和BSD）、IBM OS/2和Windows NT作業系統家族（如Windows XP、Windows Vista、Windows 7、Windows 8和Windows 10）。

`netstat`可用於查找網路中的問題，並可通過計算網路流量來度量網路性能。儘管該工具仍然被包含在許多Linux發行版中，但基本都被看作過時、應被替代的工具。

在Linux上，推薦使用`ss`替代`netstat`，使用`ip route`替代`netstat -r`，使用`ip -s link`替代`netstat -i`，使用`ip maddr`替代`netstat -g`。

## 命令參數

命令`netstat`的參數必須以連字符（-）而非斜槓（/）為前綴。並非所有平台都支持某些參數。

參數｜描述｜Windows｜ReactOS｜macOS｜BSD｜NetBSD｜FreeBSD｜Linux｜Solaris｜OS/2

-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）。
- Local Address：本地電腦的IP位址和正在使用的埠號。除非使用-n參數，否則將顯示與IP位址和埠對應的主機名稱。如果主機正在偵聽所有埠，則主機名顯示為星號（*）。如果埠尚未建立，則埠號顯示為星號。
- Foreign Address：遠程電腦的IP位址和正在使用的埠號。除非指定了-n參數，否則將顯示與IP位址和埠對應的主機名稱。如果埠尚未建立，則埠號顯示為星號（*）。
- State：TCP連接的狀態，可能的狀態包括CLOSE_WAIT、CLOSED、ESTABLISHED、FIN_WAIT_1、FIN_WAIT_2、LAST_ACK、LISTEN、SYN_RECEIVED、SYN_SEND和TIME_WAIT。

## 命令範例

要僅顯示TCP或UDP協議的統計訊息，請鍵入以下命令之一：

`netstat -sp tcp` `netstat -sp udp`

類Unix系統：

顯示進程ID為「pid」的進程打開的所有埠：

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

`sudo netstat -nutpacw`

Microsoft Windows：

顯示活動的TCP連接和關聯的進程ID，每5秒為一個更新周期（僅適用於基於Windows NT的作業系統或裝有修補程序的Windows 2000）：

`netstat -o 5`

顯示活動中的TCP連接和關聯的進程ID，但主機地址和埠號以數字形式表示（僅適用於基於Windows NT的作業系統或裝有修補程序的Windows 2000）：

`netstat -no`

## 應用（類UNIX系統）

命令｜說明

`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`命令的輸出結果中，星號（*）為通配符，表示「所有」。

例如：

```bash
....Local Address Foreign Address State
... *:smtp          *:*   LISTEN
```

在輸出結果中，`*:smtp`表示該進程正在本地電腦的所有網路接口上監聽所有映射為SMTP的埠，此處的星號有時會被代替，意義不改變。`*:*`中的第一個星號表示連接可以來自任何IP位址，第二個星號表示連接可以來自遠程電腦上的任何埠。

## 基本資料

- 日語原文：netstat
- 作業系統：Unix和類Unix系統、IBM OS/2、Microsoft Windows、ReactOS
- 類型：命令