2024年12月10日 星期二

如何用Linux內建指令掃描網路


文/唐任威 Vincent Tang

在滲透測試時,當我們成功拿下一台 Linux 主機,結果卻發現沒有掃描工具可用,這時我們可以直接用Linux 的內建指令來搞定 IP 位址和網路連接埠掃描。

一、掃描 IP 位址

基本 Linux 作業系統內建的 ping 指令再結合 for 迴圈就是掃描 IP 位址的最好幫手。IP 位址掃描的語法如下:

for ip in {1..254}; do (ping -c 1 192.168.0.$ip | grep "bytes from" &); done         


上述指令的語法說明如下:

  1. 「for ip in {1..254}」:這個部分就是從「1」數到「254」,也就是我們要掃描的 IP 位址範圍,例如「192.168.0.x」。
  2. 「ping -c 1 192.168.0.$ip」:這裡的「ping」指令會對每個 IP 位址發送一個 ICMP 請求(也就是測試看看該位址是否可以連接)。「-c 1」的意思是每個IP 只 ping 一次,這樣才不會浪費太多時間。
  3. 「| grep "bytes from"」:這一步是幫您過濾掉那些沒回應的 IP 位址。我們只想看到有回應的位址,所以要回應中包含 "bytes from" 這個關鍵字的才會顯示出來。
  4. 「&」:整行指令的靈魂就是這個「&」。Linux 殼層的「&」用於指定該指令於背景執行,這代表在這個迴圈裡的每個「ping」都是在背景執行,意思是同一時間會 ping 很多個 IP,不用一個一個慢慢等待,這樣掃描速度就會快很多!

圖說:透過 FOR 迴圈,IP 位址掃描結果。


透過上述指令,我們就可以在很短的時間內很快速的找出該網段中有哪些存活的 IP 位址。


二、掃描 TCP 連接埠

Linux 的 BASH 有個特異功能是可以藉由存取 /dev/tcp/<IP 位址>/<連接埠號> 路徑來建立網路連線,因此以這個功能再搭配上 for 迴圈那就是個完美的 TCP 連接埠掃描工具。完整的掃描語法如下:

for port in {1..1024}; do (echo > /dev/tcp/192.168.0.7/$port && echo $port open) 2> /dev/null; done        

接下來我們來分解一下這段指令的功能:

  1. 「for port in {1..1024}」:這個部分就是迴圈,從1 到 1024 之間的每個連接埠都會逐一進行檢查。這個範圍是常見的服務連接埠範圍(像 HTTP、SSH、FTP 等)。當然,如果有需要也可以一口氣把範圍指定為 1 到 65535,可是因為這個範圍實在太大(有六萬五千多個連接埠)所以掃描的時間相對會長上很多。
  2. 「echo > /dev/tcp/192.168.0.7/$port」:這段是最關鍵的部分。它嘗試透過 「/dev/tcp/」 這個特殊的設備文件,向目標 IP (192.168.0.7) 的指定連接埠($port) 發起連接請求。如果這個連接埠是啟用的,指令會成功;如果連接埠是關閉的,則會失敗。這裡的「echo」指令實際上並不會真的傳輸數據,只是用來測試連接。
  3. 「&& echo $port open」:當連接成功時(連接埠是開放的),這段會輸出「連接埠號碼 open」,告訴您這個連接埠是開著的。
  4. 「2> /dev/null」:這個部分會把任何錯誤訊息(像是連接埠關閉時的錯誤)丟到空(/dev/null),也就是不顯示那些錯誤訊息,讓輸出結果更乾淨,只顯示成功開啟的連接埠。

圖說:透過 FOR 迴圈,TCP 服務連接埠掃描結果。


整段指令的結果就是,它會快速檢查從 1 到 1024 的每個連接埠,並告訴 哪些連接埠是開著的。這是一個簡單又實用的方式來測試伺服器上哪些服務是開啟的,完全不需要額外工具。


結語

透過上述指令,基本就可以很輕鬆的在不需要任何額外工具的情況下快速掃描 IP 位址跟 TCP 的服務連接埠。透過掃描結果掌握該網段所有主機的 IP 位址以及這些主機上 TCP 服務連接埠的狀態。



您可在下列課程中了解更多技巧喔!

0 意見:

張貼留言