如何檢查多個(gè)遠(yuǎn)程Linux系統(tǒng)是否打開(kāi)了指定端口?
我們最近寫了一篇文章關(guān)于如何檢查遠(yuǎn)程 Linux 服務(wù)器是否打開(kāi)指定端口。它能幫助你檢查單個(gè)服務(wù)器。
如果要檢查五個(gè)服務(wù)器有沒(méi)有問(wèn)題,可以使用以下任何一個(gè)命令,如 nc
(netcat)、nmap
和 telnet
。但是如果想檢查 50 多臺(tái)服務(wù)器,那么你的解決方案是什么?
要檢查所有服務(wù)器并不容易,如果你一個(gè)一個(gè)這樣做,完全沒(méi)有必要,因?yàn)檫@樣你將會(huì)浪費(fèi)大量的時(shí)間。為了解決這種情況,我使用 nc
命令編寫了一個(gè) shell 小腳本,它將允許我們掃描任意數(shù)量服務(wù)器給定的端口。
如果你要查找單個(gè)服務(wù)器掃描,你有多個(gè)選擇,你只需閱讀 檢查遠(yuǎn)程 Linux 系統(tǒng)上的端口是否打開(kāi)? 了解更多信息。
本教程中提供了兩個(gè)腳本,這兩個(gè)腳本都很有用。這兩個(gè)腳本都用于不同的目的,你可以通過(guò)閱讀標(biāo)題輕松理解其用途。
在你閱讀這篇文章之前,我會(huì)問(wèn)你幾個(gè)問(wèn)題,如果你不知道答案你可以通過(guò)閱讀這篇文章來(lái)獲得答案。
如何檢查一個(gè)遠(yuǎn)程 Linux 服務(wù)器上指定的端口是否打開(kāi)?
如何檢查多個(gè)遠(yuǎn)程 Linux 服務(wù)器上指定的端口是否打開(kāi)?
如何檢查多個(gè)遠(yuǎn)程 Linux 服務(wù)器上是否打開(kāi)了多個(gè)指定的端口?
什么是 nc(netcat)命令?
nc
即 netcat。它是一個(gè)簡(jiǎn)單實(shí)用的 Unix 程序,它使用 TCP 或 UDP 協(xié)議進(jìn)行跨網(wǎng)絡(luò)連接進(jìn)行數(shù)據(jù)讀取和寫入。
它被設(shè)計(jì)成一個(gè)可靠的 “后端” 工具,我們可以直接使用或由其他程序和腳本輕松驅(qū)動(dòng)它。
同時(shí),它也是一個(gè)功能豐富的網(wǎng)絡(luò)調(diào)試和探索工具,因?yàn)樗梢詣?chuàng)建你需要的幾乎任何類型的連接,并具有幾個(gè)有趣的內(nèi)置功能。
netcat 有三個(gè)主要的模式。分別是連接模式,監(jiān)聽(tīng)模式和隧道模式。
nc
(netcat)的通用語(yǔ)法:
$ nc [-options] [HostName or IP] [PortNumber]
如何檢查多個(gè)遠(yuǎn)程 Linux 服務(wù)器上的端口是否打開(kāi)?
如果要檢查多個(gè)遠(yuǎn)程 Linux 服務(wù)器上給定端口是否打開(kāi),請(qǐng)使用以下 shell 腳本。
在我的例子中,我們將檢查端口 22 是否在以下遠(yuǎn)程服務(wù)器中打開(kāi),確保你已經(jīng)更新文件中的服務(wù)器列表而不是使用我的服務(wù)器列表。
你必須確保已經(jīng)更新服務(wù)器列表 :server-list.txt
。每個(gè)服務(wù)器(IP)應(yīng)該在單獨(dú)的行中。
# cat server-list.txt
192.168.1.2
192.168.1.3
192.168.1.4
192.168.1.5
192.168.1.6
192.168.1.7
使用以下腳本可以達(dá)到此目的。
# vi port_scan.sh
#!/bin/sh
for server in `more server-list.txt`
do
#echo $i
nc -zvw3 $server 22
done
設(shè)置 port_scan.sh
文件的可執(zhí)行權(quán)限。
$ chmod +x port_scan.sh
最后運(yùn)行腳本來(lái)達(dá)到此目的。
# sh port_scan.sh
Connection to 192.168.1.2 22 port [tcp/ssh] succeeded!
Connection to 192.168.1.3 22 port [tcp/ssh] succeeded!
Connection to 192.168.1.4 22 port [tcp/ssh] succeeded!
Connection to 192.168.1.5 22 port [tcp/ssh] succeeded!
Connection to 192.168.1.6 22 port [tcp/ssh] succeeded!
Connection to 192.168.1.7 22 port [tcp/ssh] succeeded!
如何檢查多個(gè)遠(yuǎn)程 Linux 服務(wù)器上是否打開(kāi)多個(gè)端口?
如果要檢查多個(gè)服務(wù)器中的多個(gè)端口,請(qǐng)使用下面的腳本。
在我的例子中,我們將檢查給定服務(wù)器的 22 和 80 端口是否打開(kāi)。確保你必須替換所需的端口和服務(wù)器名稱而不使用是我的。
你必須確保已經(jīng)將要檢查的端口寫入 port-list.txt
文件中。每個(gè)端口應(yīng)該在一個(gè)單獨(dú)的行中。
# cat port-list.txt
22
80
你必須確保已經(jīng)將要檢查的服務(wù)器(IP 地址)寫入 server-list.txt
到文件中。每個(gè)服務(wù)器(IP) 應(yīng)該在單獨(dú)的行中。
# cat server-list.txt
192.168.1.2
192.168.1.3
192.168.1.4
192.168.1.5
192.168.1.6
192.168.1.7
使用以下腳本來(lái)達(dá)成此目的。
# vi multiple_port_scan.sh
#!/bin/sh
for server in `more server-list.txt`
do
for port in `more port-list.txt`
do
#echo $server
nc -zvw3 $server $port
echo ""
done
done
設(shè)置 multiple_port_scan.sh
文件的可執(zhí)行權(quán)限。
$ chmod +x multiple_port_scan.sh
最后運(yùn)行腳本來(lái)實(shí)現(xiàn)這一目的。
# sh multiple_port_scan.sh
Connection to 192.168.1.2 22 port [tcp/ssh] succeeded!
Connection to 192.168.1.2 80 port [tcp/http] succeeded!
Connection to 192.168.1.3 22 port [tcp/ssh] succeeded!
Connection to 192.168.1.3 80 port [tcp/http] succeeded!
Connection to 192.168.1.4 22 port [tcp/ssh] succeeded!
Connection to 192.168.1.4 80 port [tcp/http] succeeded!
Connection to 192.168.1.5 22 port [tcp/ssh] succeeded!
Connection to 192.168.1.5 80 port [tcp/http] succeeded!
Connection to 192.168.1.6 22 port [tcp/ssh] succeeded!
Connection to 192.168.1.6 80 port [tcp/http] succeeded!
Connection to 192.168.1.7 22 port [tcp/ssh] succeeded!
Connection to 192.168.1.7 80 port [tcp/http] succeeded!