我們需要先簡(jiǎn)單了解一下端口的作用。在互聯(lián)網(wǎng)中,如果 IP 地址是 IP 服務(wù)器在互聯(lián)網(wǎng)中唯一的地址標(biāo)識(shí),那么大家可以想象一下:我有一臺(tái)服務(wù)器,它有固定的公網(wǎng) IP 地址,通過 IP 地址可以找到我的服務(wù)器。但是我的服務(wù)器中既啟動(dòng)了網(wǎng)頁服務(wù)(Web 服務(wù)),又啟動(dòng)了文件傳輸服務(wù)(FTP 服務(wù)),那么你的客戶端訪問我的服務(wù)器,到底應(yīng)該如何確定你訪問的是哪一個(gè)服務(wù)呢?
端口就是用于網(wǎng)絡(luò)通信的接口,是數(shù)據(jù)從傳輸層向上傳遞到應(yīng)用層的數(shù)據(jù)通道。我們可以理解為每個(gè)常規(guī)服務(wù)都有默認(rèn)的端口號(hào),通過不同的端口號(hào),我們就可以確定不同的服務(wù)。也就是說,客戶端通過 IP 地址訪問到我的服務(wù)器,如果數(shù)據(jù)包訪問的是 80 端口,則訪問的是 Web 服務(wù);而如果數(shù)據(jù)包訪問的是 21 端口,則訪問的是 FTP 服務(wù)。
我們可以簡(jiǎn)單地理解為每個(gè)常規(guī)服務(wù)都有一個(gè)默認(rèn)端口(默認(rèn)端口可以修改),這個(gè)端口是所有人都知道的,客戶端可以通過固定的端口訪問指定的服務(wù)。而我們通過在服務(wù)器中查看已經(jīng)開啟的端口號(hào),就可以判斷服務(wù)器中開啟了那些服務(wù)。
netstat 是網(wǎng)絡(luò)狀態(tài)查看命令,既可以查看到本機(jī)開啟的端口,也可以查看有哪些客戶端連接。netstat 命令的基本信息如下。
命令名稱:netstat。
英文原意:Print network connections, routing tables, interface statistics, masquerade connections, and multicast memberships。
所在路徑:/bin/netstat.
執(zhí)行權(quán)限:所有用戶。
功能描述:輸出網(wǎng)絡(luò)連接、路由表、接口統(tǒng)計(jì)、偽裝連接和組播成員。
命令格式如下:
[root@localhost ~]# netstat [選項(xiàng)]
選項(xiàng):
-a:列出所有網(wǎng)絡(luò)狀態(tài),包括 Socket 程序;
-c秒數(shù):指定每隔幾秒刷新一次網(wǎng)絡(luò)狀態(tài);
-n:使用 IP 地址和端口號(hào)顯示,不使用域名與服務(wù)名;-p:顯示 PID 和程序名;
-t:顯示使用 TCP 協(xié)議端口的連接狀況;
-u:顯示使用 UDP 協(xié)議端口的連接狀況;
-I:僅顯示監(jiān)聽狀態(tài)的連接;
-r:顯示路由表;
【例 1】查看本機(jī)開啟的端口。
這是本機(jī)最常用的方式,使用選項(xiàng)"-tuln"。因?yàn)槭褂昧?quot;-I"選項(xiàng),所以只能看到監(jiān)聽狀態(tài)的連接,而不能看到已經(jīng)連接狀態(tài)的連接。例如:
[root@localhost ~]# netstat -tuln
Active Internet connections (only servers)Proto Recv-Q Send-Q Local Address Foreign Address Statetcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:11211 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
tcp 0 0:::11211 :::* LISTEN
tcp 0 0 :::80 :::* LISTEN
tcp 0 0 :::22 :::* LISTEN
udp 0 0 0.0.0.0:11211 0.0.0.0:*
udp 0 0:::11211 :::*
#協(xié)議接收隊(duì)列發(fā)送隊(duì)列本機(jī)的 IP 地址及端口號(hào) 遠(yuǎn)程主機(jī)的 IP 地址及端口號(hào) 狀態(tài)這個(gè)命令的輸出較多。
1) Proto:網(wǎng)絡(luò)連接的協(xié)議,一般就是 TCP 協(xié)議或者 UDP 協(xié)議。
2) Recv-Q:表示接收到的數(shù)據(jù),已經(jīng)在本地的緩沖中,但是還沒有被進(jìn)程取走。
3) Send-Q:表示從本機(jī)發(fā)送,對(duì)方還沒有收到的數(shù)據(jù),依然在本地的緩沖中,不具備 ACK 標(biāo)志的數(shù)據(jù)包。
4) Local Address:本機(jī)的 IP 地址和端口號(hào)。
5) ForeignAddress:遠(yuǎn)程主機(jī)的 IP 地址和端口號(hào)。
6) State:狀態(tài)。常見的狀態(tài)主要有以下幾種。
-LISTEN:監(jiān)聽狀態(tài),只有 TCP 協(xié)議需要監(jiān)聽,而 UDP 協(xié)議不需要監(jiān)聽。
-ESTABLISHED:已經(jīng)建立連接的狀態(tài)。如果使用"-I"選項(xiàng),則看不到已經(jīng)建立連接的狀態(tài)。
-SYN_SENT:SYN 發(fā)起包,就是主動(dòng)發(fā)起連接的數(shù)據(jù)包。
-SYN_RECV:接收到主動(dòng)連接的數(shù)據(jù)包。
-FIN_WAIT1:正在中斷的連接。
-FIN_WAIT2:已經(jīng)中斷的連接,但是正在等待對(duì)方主機(jī)進(jìn)行確認(rèn)。
-TIME_WAIT:連接已經(jīng)中斷,但是套接字依然在網(wǎng)絡(luò)中等待結(jié)束。
-CLOSED:套接字沒有被使用。
在這些狀態(tài)中,我們最常用的就是 LISTEN 和 ESTABLISHED 狀態(tài),一種代表正在監(jiān)聽,另一種代表已經(jīng)連接。
【例 2】查看本機(jī)有哪些程序開啟的端口。
如果使用"-p"選項(xiàng),則可以查看到是哪個(gè)程序占用了端口,并且可以知道這個(gè)程序的 PID。例如:
[root@localhost ~]# netstat -tulnp
Active Internet connections (only servers)Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program nametcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 2359/mysqldtcp 0 0 0.0.0.0:11211 0.0.0.0:* LISTEN 1563/memcachedtcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1490/sshdtcp 0 0 :::11211 :::* LISTEN 1563/memcachedtcp 0 0 :::80 :::* LISTEN 21025/httpd
tcp 0 0 :::22 :::*
LISTEN 1490/sshd
udp 0 0 0.0.0.0:11211 0.0.0.0:* 1563/memcachedudp 0 0:::11211 :::* 1563/memcached
#比之前的命令多了一個(gè)"-p"選項(xiàng),結(jié)果多了可以知道是哪個(gè)程序占用了端口【例 3】 查看所有連接。
使用選項(xiàng)"-an"可以查看所有連接,包括監(jiān)聽狀態(tài)的連接(LISTEN)、已經(jīng)建立連接狀態(tài)的連接(ESTABLISHED)、Socke 程序連接等。因?yàn)檫B接較多,所以輸出的內(nèi)容有很多。例如:
[root@localhost ~]# netstat -an
Active Internet connections (servers and established)Proto Recv-Q Send-Q Local Address Foreign Address Statetcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN
tcp 0 0 0.0.0.0:11211 0.0.0.0:* LISTEN
tcp 0 0 117.79.130.170:80 78.46.174.55:58815 SYN_RECVtcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN
tcp 0 0 117.79.130.170:22 124.205.129.99:10379 ESTABLISHEDtcp 0 0 117.79.130.170:22 124.205.129.99:11811 ESTABLISHED...省略部分內(nèi)容...
udp 0 0 0.0.0.0:11211 0.0.0.0:*
udp 0 0:::11211 :::*
Active UNIX domain sockets (servers and established)Proto RefCnt Flags Type State I-Node Pathunix 2 [ACC] STREAM LISTENING 9761 @/var/run/hald/dbus-fr41WkQn1C…省略部分內(nèi)容...
從"Active UNIX domain sockets"開始,之后的內(nèi)容就是 Socke 程序產(chǎn)生的連接,之前的內(nèi)容都是網(wǎng)絡(luò)服務(wù)產(chǎn)生的連接。我們可以在"-an"選項(xiàng)的輸出中看到各種網(wǎng)絡(luò)連接狀態(tài),而之前的"-tuln"選項(xiàng)則只能看到監(jiān)聽狀態(tài)。