Netstat是Linux系統中常用的網路命令之一,主要用於查詢網路狀態和統計信息,能夠通過此命令查看網路連接、路由表、網路介面等信息。特別是可以通過netstat命令查看埠狀態和進程與埠之間的關係,實現網路故障排查和系統調優等功能。
一、netstat命令的基本使用
在使用netstat命令進行埠狀態查看前,首先需要了解netstat命令的基本用法,如下:
netstat [選項]
netstat命令有多種操作模式,可以通過選項選擇不同的模式。其中,最常用的選項為:
- -a:顯示所有socket,包括正在監聽的和連接中的socket
- -n:以數字形式顯示地址和埠號,而不通過域名和服務名
- -p:顯示進程與socket之間的關係
- -t:顯示TCP協議的socket
- -u:顯示UDP協議的socket
下面是一些常用的netstat命令示例:
# 顯示所有TCP和UDP埠的監聽狀態 netstat -a # 顯示所有處於連接狀態的TCP埠 netstat -at # 顯示所有處於監聽狀態的TCP埠 netstat -lt # 顯示本機處於TIME_WAIT狀態的TCP埠 netstat -tan | grep TIME_WAIT # 顯示指定埠的佔用狀態 netstat -lnp | grep 埠號
二、netstat命令查看埠狀態
本節介紹使用netstat命令查看埠狀態的相關內容,主要包括埠狀態的定義、查看方法等。
1. 埠狀態的定義
埠狀態是指當前運行狀態中,某個埠是否處於監聽狀態或連接狀態,通常有五種狀態,分別為:
- CLOSED:關閉狀態,表明埠未被打開,未與其他埠建立連接
- LISTEN:監聽狀態,表明該埠正在等待連接請求
- SYN_SENT:表示已經發送連接請求,等待對應的連接確認
- SYN_RECV:表示已經接收到了連接請求並確認
- ESTABLISHED:已連接狀態,表示該埠已經與遠端埠建立了連接
2. 查看埠狀態的方法
使用netstat命令查看埠狀態的方法有以下幾種:
- 使用netstat -a命令查看所有埠狀態
$ netstat -a Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 *:ssh *:* LISTEN tcp 0 0 localhost.localdom:smtp *:* LISTEN tcp 0 0 localhost.localdoma:smtp *:* LISTEN tcp6 0 0 [::]:http [::]:* LISTEN tcp6 0 0 [::]:ssh [::]:* LISTEN tcp6 0 0 [::]:https [::]:* LISTEN udp 0 0 *:mdns *:* udp 0 0 *:bootpc *:* udp6 0 0 [::]:mdns [::]:*
結果中,Local Address表示本機的IP地址和埠號,Foreign Address表示遠端主機的IP地址和埠號,State表示埠狀態。
$ netstat -tan Active Internet connections (servers and established) Proto Recv-Q Send-Q Local Address Foreign Address State tcp 0 0 127.0.0.1:38938 127.0.0.1:3306 TIME_WAIT tcp 0 0 127.0.0.1:38934 127.0.0.1:3306 TIME_WAIT tcp 0 0 127.0.0.1:38942 127.0.0.1:3306 TIME_WAIT tcp 0 0 127.0.0.1:38948 127.0.0.1:3306 TIME_WAIT tcp 0 176 127.0.0.1:57802 127.0.0.1:11211 ESTABLISHED tcp 0 0 127.0.0.1:44614 127.0.0.1:63414 TIME_WAIT tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
$ netstat -lnp Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:27017 0.0.0.0:* LISTEN 1824/mongod tcp 0 0 127.0.0.1:3306 0.0.0.0:* LISTEN 1935/mysqld tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1384/sshd tcp6 0 0 :::80 :::* LISTEN 1631/apache2 tcp6 0 0 :::22 :::* LISTEN 1384/sshd
三、netstat命令的作用
netstat命令可以用於以下方面:
1. 埠掃描
通過掃描網路埠,可以確定服務是否開啟,這是安全測試工程師經常使用的一種方法。
$ netstat -an | grep "LISTEN " tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN tcp 0 0 127.0.0.1:953 0.0.0.0:* LISTEN tcp6 0 0 :::22 :::* LISTEN tcp6 0 0 ::1:25 :::* LISTEN
2. 監控網路連接
通過查看網路連接,可以了解網路請求的情況,做出相應的網路優化。
$ netstat -an | awk '/^tcp/ {++S[$NF]} END {for(a in S) print a, S[a]}' CLOSED 91 FIN_WAIT2 1 TIME_WAIT 94 ESTABLISHED 68 SYN_RECV 5
3. 排查網路故障
通過查看網路埠和進程之間的關係,可以實現網路故障排查。
$ netstat -nlp | grep 80 tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 1631/apache2
四、總結
netstat命令是Linux系統中常用的網路命令之一,能夠查看網路狀態和統計信息,以及實現網路故障排查和系統調優等功能。本文主要介紹了netstat命令的基本使用和查看埠狀態的相關內容,介紹了埠狀態的定義、查看方法等,同時列舉了netstat命令的多種作用。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/192483.html