Kali Linux 祕籍之BASH+Ping輕鬆搞定跨三層網絡自動IP存活檢測

Kali Linux 秘籍之BASH+Ping輕鬆搞定跨三層網絡自動IP存活檢測

本秘籍簡介:

第三層的發現可能是網絡管理員和技術人員中最常用的工具。 第三層的發現使用著名的ICMP ping 來識別活動主機。 此秘籍演示瞭如何使用ping 工具在遠程主機上執行第三層發現。

準備

使用ping 執行第三層發現不需要實驗環境,因為Internet 上的許多系統都將回復ICMP 回顯請求。 但是,強烈建議你只在您自己的實驗環境中執行任何類型的網絡掃描,除非你完全熟悉您受到任何管理機構施加的法律法規。 如果你希望在實驗環境中執行此技術,你需要至少有一個響應ICMP 請求的系統。

操作步驟

大多數在IT 行業工作的人都相當熟悉ping 工具。 要使用ping 確定主機是否處於活動狀態,你只需要向命令傳遞參數來定義要測試的IP 地址:

root@kali:~# ping 172.16.155.1

PING 172.16.155.1 (172.16.155.1) 56(84) bytes of data.

64 bytes from 172.16.155.1: icmp_seq=1 ttl=64 time=0.209 ms

64 bytes from 172.16.155.1: icmp_seq=2 ttl=64 time=0.230 ms

64 bytes from 172.16.155.1: icmp_seq=3 ttl=64 time=0.351 ms

^C

--- 172.16.155.1 ping statistics ---

3 packets transmitted, 3 received, 0% packet loss, time 2055ms

rtt min/avg/max/mdev = 0.209/0.263/0.351/0.063 ms

發出此命令時,ICMP 回顯請求將直接發送到提供的IP 地址。 為了接收對此ICMP回顯請求的回覆,必須滿足幾個條件。 這些條件如下:測試的IP 地址必須分配給系統系統必須處於活動狀態並在線必須存在從掃描系統到目標IP 的可用路由系統必須配置為響應ICMP 流量掃描系統和配置為丟棄ICMP 流量的目標IP 之間沒有基於主機或網絡防火牆你可以看到, 有很多變量成為ICMP 發現的成功因素。 正是由於這個原因,ICMP可能有點不可靠,但與ARP 不同,它是一個可路由的協議,可用於發現局域網外的主機。 請注意,在前面的示例中,在ping 命令顯示的輸出中出現^ C 。 這表示使用了轉義序列(具體來說,Ctrl + C )來停止進程。 與Windows 不同,默認情況下,集成到Linux 操作系統的ping 命令會無限ping 目標主機。 但是,-c 選項可用於指定要發送的ICMP 請求數。 使用此選項,一旦達到超時或每個發送的數據包的回覆已接收,過程將正常結束。 看看下面的命令:

root@kali:~# ping 172.16.155.1 -c 2

PING 172.16.155.1 (172.16.155.1) 56(84) bytes of data.

64 bytes from 172.16.155.1: icmp_seq=1 ttl=64 time=0.342 ms

64 bytes from 172.16.155.1: icmp_seq=2 ttl=64 time=0.147 ms

--- 172.16.155.1 ping statistics ---

2 packets transmitted, 2 received, 0% packet loss, time 1009ms

rtt min/avg/max/mdev = 0.147/0.244/0.342/0.098 ms

與ARPing 相同的方式可以在bash 腳本中使用,通過並行地循環遍歷多個IP,ping 可以與bash 腳本結合使用,來在多個主機上並行執行第三層發現。 為了編寫腳本,我們需要確定與成功和失敗的ping 請求相關的各種響應。 為此,我們應該首先ping 一個我們知道它活動並響應ICMP 的主機,然後使用ping 請求跟蹤一個無響應的地址。 以下命令演示了這一點:

root@kali:~# ping 172.16.155.1 -c 1

PING 172.16.155.1 (172.16.155.1) 56(84) bytes of data.

64 bytes from 172.16.155.1: icmp_seq=1 ttl=64 time=0.403 ms

--- 172.16.155.1 ping statistics ---

1 packets transmitted, 1 received, 0% packet loss, time 0ms

rtt min/avg/max/mdev = 0.403/0.403/0.403/0.000 ms

root@kali:~# ping 172.16.155.100 -c 1

PING 172.16.155.100 (172.16.155.100) 56(84) bytes of data.

From 172.16.155.150 icmp_seq=1 Destination Host Unreachable

--- 172.16.155.100 ping statistics ---

1 packets transmitted, 0 received, +1 errors, 100% packet loss, time 0ms

與ARPing 請求一樣,來自唯一字符串的字節只存在在與活動IP 地址相關的輸出中,並且也位於包含此地址的行上。 使用同樣的方式,我們可以使用grep 和cut 的組合,從任何成功的ping 請求中提取IP 地址:

root@kali:~# ping 172.16.155.1 -c 1 |grep 'bytes from'

64 bytes from 172.16.155.1: icmp_seq=1 ttl=64 time=0.248 ms

root@kali:~# ping 172.16.155.1 -c 1 |grep 'bytes from'|cut -d ' ' -f 4

172.16.155.1:

root@kali:~# ping 172.16.155.1 -c 1 |grep 'bytes from'|cut -d ' ' -f 4|cut -d ':' -f 1

172.16.155.1

root@kali:~#

通過在包含一系列目標IP 地址的循環中使用此任務序列,我們可以快速識別響應ICMP 回顯請求的活動主機。 輸出是一個簡單的的活動IP 地址列表。 使用此技術的示例腳本如下所示:

#!/bin/bash

if [ "$#" -ne 1 ]; then

echo "Usage - ./ping_sweep.sh [/24 network address]"

echo "Example - ./ping_sweep.sh 172.16.155.0"

echo "Example will perform an ICMP ping sweep of the 172.16.155.0/24 network"

exit

fi

prefix=$(echo $1 | cut -d '.' -f 1-3)

for addr in $(seq 1 254); do

ping -c 1 $prefix.$addr | grep "bytes from" | cut -d ' ' -f 4 |cut -d ":" -f 1 &

done

在提供的bash腳本中,第一行定義了bash 解釋器的位置。 接下來的代碼塊執行測試來確定是否提供了預期的一個參數。 這通過評估提供的參數的數量是否不等於1來確定。 如果未提供預期參數,則輸出腳本的用法,並且退出腳本。 用法輸出表明,腳本接受/ 24 網絡地址作為參數。 下一行代碼從提供的網絡地址中提取網絡前綴。 例如,如果提供的網絡地址是192.168.11.0 ,則前綴變量將被賦值為192.168.11 。 然後使用for 循環遍歷最後一個字節的值,來在本地/ 24 網絡中生成每個可能的IP 地址。 對於每個可能的IP 地址,執行單個ping 命令。 然後通過管道傳輸每個請求的響應,然後使用grep 來提取帶有短語bytes 的行。 這隻會提取包含活動主機的IP 地址的行。 最後,使用一系列cut 函數從該輸出中提取IP 地址。 請注意,在for 循環任務的末尾使用& 符號,而不是分號。 該符號能夠並行執行任務,而不是順序執行。 這極大地減少了掃描IP 範圍所需的時間。 然後,可以使用句號和斜槓,並帶上是可執行腳本的名稱來執行腳本:

root@kali:~# chmod +x ./ping.sh #給腳本文件增加執行權限

root@kali:~# ls -al ./ping.sh

-rwxr-xr-x 1 root root 382 May 29 06:27 ./ping.sh

root@kali:~# ./ping.sh

Usage - ./ping_sweep.sh [/24 network address]

Example - ./ping_sweep.sh 172.16.155.0

Example will perform an ICMP ping sweep of the 172.16.155.0/24 network

root@kali:~# ./ping.sh 172.16.155.0

172.16.155.2

172.16.155.1

172.16.155.150

root@kali:~#

當在沒有提供任何參數的情況下執行時,腳本會返回用法。 但是,當使用網絡地址值執行時,任務序列開始執行,並返回活動IP 地址的列表。 如前面的腳本中所討論的那樣,此腳本的輸出也可以重定向到文本文件,來供將來使用。 這可以使用尖括號,後跟輸出文件的名稱來實現。

root@kali:~# ./ping.sh 172.16.155.0 > output.txt

root@kali:~# ls output.txt

output.txt

root@kali:~# cat output.txt

172.16.155.2

172.16.155.1

172.16.155.150

在提供的示例中,ls 命令用於確認輸出文件已創建。 通過將文件名作為參數傳遞給cat 命令,可以查看此輸出文件的內容。

工作原理

Ping 是IT 行業中眾所周知的工具,其現有功能能用於識別活動主機。 然而,它的目的是為了發現單個主機是否存活,而不是作為掃描工具。 這個秘籍中的bash 腳本基本上與在/ 24 CIDR範圍中對每個可能的IP 地址使用ping 相同。 但是,我們不需要手動執行這種繁瑣的任務,bash 允許我們通過循環傳遞任務序列來快速,輕鬆地執行此任務。


分享到:


相關文章: