Bash腳本+Kali ARPing 實現自動化IP掃描

Bash腳本+Kali ARPing 實現自動化IP掃描

ARPing簡介:

ARPing 是一個命令行網絡工具,具有類似於常用的ping 工具的功能。 此工具可通過提供該IP 地址作為參數,來識別活動主機是否位於給定IP 的本地網絡上。 這個秘籍將討論如何使用ARPing 掃描網絡上的活動主機。

準備

要使用ARPing 執行ARP 發現,你需要在LAN 上至少擁有一個響應ARP 請求的系統。 本測試在Kali 2.0上進行

操作步驟

ARPing是一種工具,可用於發送ARP 請求並標識主機是否活動和響應。 該工具僅通過將IP 地址作為參數傳遞給它來使用:

root@kali:~# arping -c 1 172.16.155.1

ARPING 172.16.155.1 from 172.16.155.150 eth0

Unicast reply from 172.16.155.1 [00:50:56:C0:00:08] 1.047ms

Sent 1 probes (1 broadcast(s))

Received 1 response(s)

root@kali:~#

在所提供的示例中,單個ARP 請求被髮送給廣播地址,請求172.16.155.1 IP地址的物理位置。 如輸出所示,主機從000:50:56:C0:00:08 MAC地址接收到單個應答。 此工具可以更有效地用於第二層上的發現,掃描是否使用bash 腳本在多個主機上同時執行此操作。 為了測試bash 中每個實例的響應,我們應該確定響應中包含的唯一字符串,它標識了活動主機,但不包括沒有收到響應時的情況。 要識別唯一字符串,應該對無響應的IP 地址進行ARPing 請求:

root@kali:~# arping -c 1 172.16.155.100

ARPING 172.16.155.100 from 172.16.155.150 eth0

Sent 1 probes (1 broadcast(s))

Received 0 response(s)

通過分析來自成功和失敗的不同ARP 響應,你可能注意到,如果存在所提供的IP地址的相關活動主機,並且它也在包含在IP 地址的行內,則響應中存在來自字符串的唯一字節。 通過對此響應執行grep ,我們可以提取每個響應主機的IP 地址:

root@kali:~# arping -c 1 172.16.155.1 | grep 'reply from'

Unicast reply from 172.16.155.1 [00:50:56:C0:00:08] 0.712ms

我們可以僅僅通過處理提供給cut 函數的分隔符和字段值,從返回的字符串中輕鬆地提取IP 地址:

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

172.16.155.1

在識別如何從正面ARPing 響應中提取IP 在bash 腳本中輕易將該任務傳遞給循環,並輸出實時IP 地址列表。 使用此技術的腳本的示例如下所示:

root@kali:~# cat arping.sh

#!/bin/bash

if [ $# -ne 1 ]; then

echo "Usage - ./arping.sh [interface]"

echo "Example - ./arping.sh eth0"

echo "Example will perform an ARP scan of the local subnet to which eth0 is assigned"

exit

fi

interface=$1

prefix=$(ifconfig $inerface | grep 'inet'| head -n 1| cut -d ' ' -f 10|cut -d '.' -f 1-3 ) # 由於輸出的間隔符空格,因此我這邊cut -d後面用的是空格,大家做的過程中,可以根據自己的情況變化

for addr in $(seq 1 254); do

arping -c 1 $prefix.$addr | grep 'reply from' |cut -d ' ' -f 4 &

done

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

注意:給文件增加執行權限如下命令集:

root@kali:~# chmod +x arping.sh

root@kali:~# ls -al arping.sh

-rwxr-xr-x 1 root root 552 May 28 23:18 arping.sh

root@kali:~#

看看下面的執行命令集:

root@kali:~# ./arping.sh

Usage - ./arping.sh [interface]

Example - ./arping.sh eth0

Example will perform an ARP scan of the local subnet to which eth0 is assigned

root@kali:~# ./arping.sh eth0

root@kali:~# 172.16.155.1

172.16.155.2

172.16.155.254

可以輕易將腳本的輸出重定向到文本文件,然後用於隨後的分析。 可以使用尖括號重定向輸出,後跟文本文件的名稱。 一個例子如下:

root@kali:~# ./arping.sh eth0 > output.txt

root@kali:~# ls output.txt

output.txt

root@kali:~# cat output.txt

172.16.155.1

172.16.155.2

172.16.155.254

root@kali:~#

一旦輸出重定向到輸出文件,你就可以使用ls 命令驗證文件是否已寫入文件系統,或者可以使用cat 命令查看文件的內容。 此腳本還可以修改為從輸入文件讀取,並僅驗證此文件中列出的主機是否處於活動狀態。 對於以下腳本,你需要擁有IP 地址列表的輸入文件。 為此,我們可以使用與上一個秘籍中討論的Scapy 腳本所使用的相同的輸入文件:

#!/bin/bash

if [ $# -ne 1 ]; then

echo "Usage - ./arping.sh [interface]"

echo "Example - ./arping.sh eth0"

echo "Example will perform an ARP scan of the local subnet to which eth0 is assigned"

exit

fi

file=$1

for addr in $(cat $file); do

arping -c 1 $addr | grep 'reply from' |cut -d ' ' -f 4 &

done

這個腳本和前一個腳本唯一的主要區別是,並沒有提供一個接口名,而是在執行腳本時提供輸入列表的文件名。 這個參數被傳遞給文件變量。 然後,for 循環用於循環遍歷此文件中的每個值,來執行ARPing 任務。 為了執行腳本,請使用句號和斜槓,後跟可執行腳本的名稱:

root@kali:~# ./arping.sh

Usage - ./arping.sh [interface]

Example - ./arping.sh eth0

Example will perform an ARP scan of the local subnet to which eth0 is assigned

root@kali:~# ./arp.sh output.txt

-bash: ./arp.sh: No such file or directory

root@kali:~#

工作原理

ARPing 是一個工具,用於驗證單個主機是否在線。 然而,它的簡單用法的使我們很容易操作它在bash 中按順序掃描多個主機。 這是通過循環遍歷一系列IP 地址,然後將這些IP 地址作為參數提供給工具來完成的。


分享到:


相關文章: