第二章 探索掃描(一)
作者:Justin Hutchens
譯者:飛龍
2.1 使用 Scapy 探索第二層
Scapy 是一個強大的交互工具,可用于捕獲,分析,操作甚至創建協議兼容的網絡流量,然后注入到網絡中。 Scapy 也是一個可以在 Python 中使用的庫,從而提供創建高效的腳本,來執行網絡流量處理和操作的函數。 這個特定的秘籍演示了如何使用 Scapy 執行 ARP 發現,以及如何使用P ython 和 Scapy 創建腳本來簡化第二層發現過程。
準備
要使用 Scapy 執行 ARP 發現,你需要在 LAN 上至少擁有一個響應 ARP 請求的系統。 提供的示例使用 Linux 和 Windows 系統的組合。 有關在本地實驗環境中設置系統的更多信息,請參閱第一章入中的“安裝 Metasploitable2”和“安裝 Windows Server”秘籍。
此外,本節需要使用文本編輯器(如 VIM 或 Nano)將腳本寫入文件系統。 有關編寫腳本的更多信息,請參閱第一章入門中的“使用文本編輯器(VIM 和 Nano)”秘籍。
操作步驟
為了了解 ARP 發現的工作原理,我們使用 Scapy 來開發自定義數據包,這允讓我們能夠使用 ARP 識別 LAN 上的主機。 要在 Kali Linux 中開始使用 Scapy,請從終端輸入scapy
命令。 然后,你可以使用display()
函數以下列方式查看在 Scapy 中創建的任何 ARP 對象的默認配置:
root@KaliLinux:~# scapy Welcome to Scapy (2.2.0)
>>> ARP().display()
###[ ARP ]###
hwtype= 0x1
ptype= 0x800
hwlen= 6
plen= 4
op= who-has
hwsrc= 00:0c:29:fd:01:05
psrc= 172.16.36.232
hwdst= 00:00:00:00:00:00
pdst= 0.0.0.0
請注意,IP 和 MAC 源地址都會自動配置為與運行 Scapy 的主機相關的值。 除非你需要偽造源地址,否則對于任何 Scapy 對象永遠不必更改這些值。 ARP 的默認操作碼值被自動設置為who-has
,表明該封包用于請求 IP 和 MAC 關聯。 在這種情況下,我們需要提供的唯一值是目標 IP 地址。 為此,我們可以使用 ARP 函數創建一個對象,將其賦給一個變量。 變量的名稱是無所謂(在提供的示例中,使用變量名稱arp_request
)。 看看下面的命令:
>>> arp_request = ARP()
>>> arp_request.pdst = "172.16.36.135"
>>> arp_request.display()
###[ ARP ]###
hwtype= 0x1
ptype= 0x800
hwlen= 6
plen= 4
op= who-has
hwsrc= 00:0c:29:65:fc:d2
psrc= 172.16.36.132
hwdst= 00:00:00:00:00:00
pdst= 172.16.36.135
注意,display()
函數可以在新創建的 ARP 對象上調用,來驗證配置值是否已更新。 對于此練習,請使用與實驗環境網絡中的活動計算機對應的目標 IP 地址。 然后sr1()
函數可以用于發送請求并返回第一個響應:
>>> sr1(arp_request)
Begin emission:
......................................*
Finished to send 1 packets.
Received 39 packets, got 1 answers, remaining 0 packets
<ARP hwtype=0x1 ptype=0x800 hwlen=6 plen=4 op=is-at hwsrc=00:0c:29:3d:84:32 psrc=172.16.36.135 hwdst=00:0c:29:65:fc:d2 pdst=172.16.36.132 |<Padding load='\x00\x00\x00\x00\x00\x00\x00\x00\x00\ x00\x00\x00\x00\x00\x00\x00\x00\x00' |>>
或者,模可以通過直接調用該函數,并將任何特殊配置作為參數傳遞給它,來執行相同的任務,如以下命令所示。 這可以避免使用不必要的變量的混亂,并且還可以在單行代碼中完成整個任務:
>>> sr1(ARP(pdst="172.16.36.135"))
Begin emission: .........................*
Finished to send 1 packets.
Received 26 packets, got 1 answers, remaining 0 packets
<ARP hwtype=0x1 ptype=0x800 hwlen=6 plen=4 op=is-at hwsrc=00:0c:29:3d:84:32 psrc=172.16.36.135 hwdst=00:0c:29:65:fc:d2 pdst=172.16.36.132 |<Padding load='\x00\x00\x00\x00\x00\x00\x00\x00\x00\ x00\x00\x00\x00\x00\x00\x00\x00\x00' |>>
注意,在這些情況的每一個中,返回響應表明,172.16.36.135
的 IP 地址的 MAC 地址為00:0C:29:3D:84:32
。 如果執行相同的任務,但是目標 IP 地址不對應實驗環境網絡上的活動主機,則不會收到任何響應,并且該功能將無限繼續分析本地接口上傳入的流量 。
你可以使用Ctrl + C
強制停止該函數。或者,你可以指定一個timeout
參數來避免此問題。 當 Scapy 在P ython 腳本中使用時,超時的使用將變得至關重要。 要使用超時,應向發送/接收函數提供一個附加參數,指定等待傳入響應的秒數:
>>> arp_request.pdst = "172.16.36.134"
>>> sr1(arp_request, timeout=1)
Begin emission:
......................................................................... ............
Finished to send 1 packets.
................................. ......................................................................... ........................................
Received 3285 packets, got 0 answers, remaining 1 packets
>>>
通過使用超時功能,發送到非響應主機的請求將在指定的時間之后返回,并顯示捕獲到 0 個應答。 此外,此函數收到的響應也可以賦給變量,并且可以通過訪問此變量對響應執行后續處理:
>>> response = sr1(arp_request, timeout=1)
Begin emission:
....................................*
Finished to send 1 packets.
Received 37 packets, got 1 answers, remaining 0 packets
>>> response.display()
###[ ARP ]###
hwtype= 0x1
ptype= 0x800
hwlen= 6
plen= 4
op= is-at
hwsrc= 00:0c:29:3d:84:32
psrc= 172.16.36.135
hwdst= 00:0c:29:65:fc:d2
pdst= 172.16.36.132
###[ Padding ]###
load= '\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\ x00\x00\x00'
Scapy也可以用作 Python 腳本語言中的庫。 這可以用于高效自動執行 Scapy 中執行的冗余任務。 Python 和 Scapy 可以用于循環遍歷本地子網內的每個可能的主機地址,并向每個子網發送 ARP 請求。 下面的示例腳本可用于在主機的連續序列上執行第二層發現:
#!/usr/bin/python
import logging
import subprocess
logging.getLogger("scapy.runtime").setLevel(logging.ERROR)
from scapy.all import *
if len(sys.argv) != 2:
print "Usage - ./arp_disc.py [interface]"
print "Example - ./arp_disc.py eth0"
print "Example will perform an ARP scan of the local subnet to which eth0 is assigned"
sys.exit()
interface = str(sys.argv[1])
ip = subprocess.check_output("ifconfig " + interface + " | grep 'inet addr' | cut -d ':' -f 2 | cut -d ' ' -f 1", shell=True).strip()
prefix = ip.split('.')[0] + '.' + ip.split('.')[1] + '.' + ip.split('.')[2] + '.'
for addr in range(0,254):
answer=sr1(ARP(pdst=prefix+str(addr)),timeout=1,verbose=0)
if answer == None:
pass
else:
print prefix+str(addr)
腳本的第一行標識了 Python 解釋器所在的位置,以便腳本可以在不傳遞到解釋器的情況下執行。 然后腳本導入所有 Scapy 函數,并定義 Scapy 日志記錄級別,以消除腳本中不必要的輸出。 還導入了子過程庫,以便于從系統調用中提取信息。 第二個代碼塊是條件測試,用于評估是否向腳本提供了所需的參數。 如果在執行時未提供所需的參數,則腳本將輸出使用情況的說明。 該說明包括工具的用法,示例和所執行任務的解釋。
在這個代碼塊之后,有一個單獨的代碼行將所提供的參數賦值給interface
變量。下一個代碼塊使用check_output()
子進程函數執行ifconfig
系統調用,該調用也使用grep
和cut
從作為參數提供的本地接口提取 IP 地址。然后將此輸出賦給ip
變量。然后使用split
函數從 IP 地址字符串中提取/ 24
網絡前綴。例如,如果ip
變量包含192.168.11.4
字符串,則值為192.168.11
。它將賦給prefix
變量。最后一個代碼塊是一個用于執行實際掃描的for
循環。 for
循環遍歷介于 0 和 254 之間的所有值,并且對于每次迭代,該值隨后附加到網絡前綴后面。在早先提供的示例的中,將針對192.168.11.0
和192.168.11.254
之間的每個 IP 地址廣播 ARP 請求。然后對于每個回復的活動主機,將相應的 IP 地址打印到屏幕上,以表明主機在 LAN 上活動。一旦腳本被寫入本地目錄,你可以在終端中使用句號和斜杠,然后是可執行腳本的名稱來執行它。看看以下用于執行腳本的命令:
root@KaliLinux:~# ./arp_disc.py
Usage - ./arp_disc.py [interface]
Example - ./arp_disc.py eth0
Example will perform an ARP scan of the local subnet to which eth0 is assigned
如果在沒有提供任何參數的情況下執行腳本,則會將使用情況輸出到屏幕。 用法輸出表明此腳本需要一個參數,該參數定義應使用哪個接口執行掃描。 在以下示例中,使用eth0
接口執行腳本:
root@KaliLinux:~# ./arp_disc.py eth0
172.16.36.1
172.16.36.2
172.16.36.132
172.16.36.135
172.16.36.254
一旦運行,腳本將確定提供的接口的本地子網; 在此子網上執行 ARP 掃描,然后根據來自這些 IP 的主機的響應輸出 IP 地活動址列表。 此外,Wireshark 可以同時運行,因為腳本正在運行來觀察如何按順序廣播每個地址的請求,以及活動主機如何響應這些請求,如以下屏幕截圖所示:
此外,我們可以輕易將腳本的輸出重定向到文本文件,然后可以用于隨后的分析。 可以使用尖括號重定向輸出,后跟文本文件的名稱。 一個例子如下:
root@KaliLinux:~# ./arp_disc.py eth0 > output.txt
root@KaliLinux:~# ls output.txt
output.txt
root@KaliLinux:~# cat output.txt
172.16.36.1
172.16.36.2
172.16.36.132
172.16.36.135
172.16.36.254
一旦輸出重定向到輸出文件,你可以使用ls
命令驗證文件是否已寫入文件系統,或者可以使用cat
命令查看文件的內容。 此腳本還可以輕松地修改為,僅對文本文件中包含的某些 IP 地址執行 ARP 請求。 為此,我們首先需要創建一個我們希望掃描的 IP 地址列表。 為此,模可以使用 Nano 或 VIM 文本編輯器。 為了評估腳本的功能,請包含先之前發現的一些活動地址,以及位于不對應任何活動主機的相同范圍內的一些其他隨機選擇的地址。 為了在 VIM 或 Nano 中創建輸入文件,請使用以下命令之一:
root@KaliLinux:~# vim iplist.txt
root@KaliLinux:~# nano iplist.txt
創建輸入文件后,可以使用cat
命令驗證其內容。 假設文件已正確創建,你應該會看到你在文本編輯器中輸入的 IP 地址列表:
root@KaliLinux:~# cat iplist.txt
172.16.36.1
172.16.36.2
172.16.36.232
172.16.36.135
172.16.36.180
172.16.36.203
172.16.36.205
172.16.36.254
為了創建一個將接受文本文件作為輸入的腳本,我們可以修改上一個練習中的現有腳本,或創建一個新的腳本文件。 為了在我們的腳本中使用這個 IP 地址列表,我們需要在 Python 中執行一些文件處理。 工作腳本的示例如下所示:
#!/usr/bin/python
import logging
logging.getLogger("scapy.runtime").setLevel(logging.ERROR)
from scapy.all import *
if len(sys.argv) != 2:
print "Usage - ./arp_disc.py [filename]"
print "Example - ./arp_disc.py iplist.txt"
print "Example will perform an ARP scan of the IP addresses listed in iplist.txt"
sys.exit()
filename = str(sys.argv[1])
file = open(filename,'r')
for addr in file:
answer = sr1(ARP(pdst=addr.strip()),timeout=1,verbose=0)
if answer == None:
pass
else:
print addr.strip()
這個腳本和以前用來循環遍歷連續序列的腳本中唯一的真正區別是,創建一個稱為file
而不是interface
的變量。 然后使用open()
函數,通過在腳本的相同目錄中打開iplist.txt
文件,來創建對象。 r
值也傳遞給函數來指定對文件的只讀訪問。 for
循環遍歷文件中列出的每個 IP 地址,然后輸出回復 ARP 廣播請求的 IP 地址。 此腳本可以以與前面討論的相同方式執行:
root@KaliLinux:~# ./arp_disc.py
Usage - ./arp_disc.py [filename]
Example - ./arp_disc.py iplist.txt
Example will perform an ARP scan of the IP addresses listed in iplist.txt
如果在沒有提供任何參數的情況下執行腳本,則會將使用情況輸出到屏幕。 使用情況輸出表明,此腳本需要一個參數,用于定義要掃描的 IP 地址的輸入列表。 在以下示例中,使用執行目錄中的iplist.txt
文件執行腳本:
root@KaliLinux:~# ./arp_disc.py iplist.txt
172.16.36.2
172.16.36.1
172.16.36.132
172.16.36.135
172.16.36.254
一旦運行,腳本只會輸出輸入文件中的 IP 地址,并且也響應 ARP 請求流量。 這些地址中的每一個表示在 LAN 上的活動系統。 使用與前面討論的相同的方式,此腳本的輸出可以輕易重定向到一個文件,使用尖1括號后跟輸出文件的所需名稱:
root@KaliLinux:~# ./arp_disc.py iplist.txt > output.txt
root@KaliLinux:~# ls output.txt
output.txt
root@KaliLinux:~# cat output.txt
172.16.36.2
172.16.36.1
172.16.36.132
172.16.36.135
172.16.36.254
一旦將輸出重定向到輸出文件,你可以使用ls
命令驗證文件是否已寫入文件系統,或者可以使用cat
命令查看文件的內容。
工作原理
通過使用sr1()
(發送/接收單個)功能,可以在 Scapy 中進行 ARP 發現。 此函數注入由提供的參數定義的數據包,然后等待接收單個響應。 在這種情況下,我們廣播了單個 ARP 請求,并且函數將返回響應。 Scapy 庫可以將此技術輕易集成到腳本中,并可以測試多個系統。
2.2 使用 ARPing 探索第二層
ARPing 是一個命令行網絡工具,具有類似于常用的ping
工具的功能。 此工具可通過提供該 IP 地址作為參數,來識別活動主機是否位于給定 IP 的本地網絡上。 這個秘籍將討論如何使用 ARPing 掃描網絡上的活動主機。
準備
要使用 ARPing 執行 ARP 發現,你需要在 LAN 上至少擁有一個響應 ARP 請求的系統。 提供的示例使用 Linux 和 Windows 系統的組合。 有關在本地實驗環境中設置系統的更多信息,請參閱第一章入中的“安裝 Metasploitable2”和“安裝 Windows Server”秘籍。
此外,本節需要使用文本編輯器(如 VIM 或 Nano)將腳本寫入文件系統。 有關編寫腳本的更多信息,請參閱第一章入門中的“使用文本編輯器(VIM 和 Nano)”秘籍。
操作步驟
ARPing是一種工具,可用于發送 ARP 請求并標識主機是否活動和響應。 該工具僅通過將 IP 地址作為參數傳遞給它來使用:
root@KaliLinux:~# arping 172.16.36.135 -c 1
ARPING 172.16.36.135
60 bytes from 00:0c:29:3d:84:32 (172.16.36.135): index=0 time=249.000 usec
--- 172.16.36.135 statistics --
1 packets transmitted, 1 packets received, 0% unanswered (0 extra)
在所提供的示例中,單個 ARP 請求被發送給廣播地址,請求172.16.36.135
IP 地址的物理位置。 如輸出所示,主機從00:0C:29:3D:84:32
MAC地址接收到單個應答。 此工具可以更有效地用于第二層上的發現,掃描是否使用 bash 腳本在多個主機上同時執行此操作。 為了測試 bash 中每個實例的響應,我們應該確定響應中包含的唯一字符串,它標識了活動主機,但不包括沒有收到響應時的情況。 要識別唯一字符串,應該對無響應的 IP 地址進行 ARPing 請求:
root@KaliLinux:~# arping 172.16.36.136 -c 1
ARPING 172.16.36.136
--- 172.16.36.136 statistics --
1 packets transmitted, 0 packets received, 100% unanswered (0 extra)
通過分析來自成功和失敗的不同 ARP 響應,你可能注意到,如果存在所提供的 IP 地址的相關活動主機,并且它也在包含在 IP 地址的行內,則響應中存在來自字符串的唯一字節。 通過對此響應執行grep
,我們可以提取每個響應主機的 IP 地址:
root@KaliLinux:~# arping -c 1 172.16.36.135 | grep "bytes from"
60 bytes from 00:0c:29:3d:84:32 (172.16.36.135): index=0 time=10.000 usec
root@KaliLinux:~# arping -c 1 172.16.36.135 | grep "bytes from" | cut -d " " -f 4
00:0c:29:3d:84:32
我們可以僅僅通過處理提供給cut
函數的分隔符和字段值,從返回的字符串中輕松地提取 IP 地址:
root@KaliLinux:~# arping -c 1 172.16.36.135 | grep "bytes from"
60 bytes from 00:0c:29:3d:84:32 (172.16.36.135): index=0 time=328.000 usec
root@KaliLinux:~# arping -c 1 172.16.36.135 | grep "bytes from" | cut -d " " -f 5 (172.16.36.135):
root@KaliLinux:~# arping -c 1 172.16.36.135 | grep "bytes from" | cut -d " " -f 5 | cut -d "(" -f 2 172.16.36.135):
root@KaliLinux:~# arping -c 1 172.16.36.135 | grep "bytes from" | cut -d " " -f 5 | cut -d "(" -f 2 | cut -d ")" -f 1
172.16.36.135
在識別如何從正面 ARPing 響應中提取 IP 在 bash 腳本中輕易將該任務傳遞給循環,并輸出實時 IP 地址列表。 使用此技術的腳本的示例如下所示:
#!/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 $interface | grep 'inet addr' |
cut -d ':' -f 2 | cut -d ' ' -f 1 | cut -d '.' -f 1-3)
for addr in $(seq 1 254); do
arping -c 1 $prefix.$addr | grep "bytes from" | cut -d " " -f 5 | cut -d "(" -f 2 | cut -d ")" -f 1 &
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@KaliLinux:~# ./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@KaliLinux:~# ./arping.sh eth0
172.16.36.1
172.16.36.2
172.16.36.132
172.16.36.135
172.16.36.254
可以輕易將腳本的輸出重定向到文本文件,然后用于隨后的分析。 可以使用尖括號重定向輸出,后跟文本文件的名稱。 一個例子如下:
root@KaliLinux:~# ./arping.sh eth0 > output.txt
root@KaliLinux:~# ls output.txt
output.txt
root@KaliLinux:~# cat output.txt
172.16.36.1
172.16.36.2
172.16.36.132
172.16.36.135
172.16.36.254
一旦輸出重定向到輸出文件,你就可以使用ls
命令驗證文件是否已寫入文件系統,或者可以使用cat
命令查看文件的內容。 此腳本還可以修改為從輸入文件讀取,并僅驗證此文件中列出的主機是否處于活動狀態。 對于以下腳本,你需要擁有 IP 地址列表的輸入文件。 為此,我們可以使用與上一個秘籍中討論的 Scapy 腳本所使用的相同的輸入文件:
#!/bin/bash
if [ "$#" -ne 1 ]; then
echo "Usage - ./arping.sh [input file]"
echo "Example - ./arping.sh iplist.txt"
echo "Example will perform an ARP scan of all IP addresses defined in iplist.txt"
exit
fi
file=$1
for addr in $(cat $file); do
arping -c 1 $addr | grep "bytes from" | cut -d " " -f 5 | cut -d "(" -f 2 | cut -d ")" -f 1 &
done
這個腳本和前一個腳本唯一的主要區別是,并沒有提供一個接口名,而是在執行腳本時提供輸入列表的文件名。 這個參數被傳遞給文件變量。 然后,for
循環用于循環遍歷此文件中的每個值,來執行 ARPing 任務。 為了執行腳本,請使用句號和斜杠,后跟可執行腳本的名稱:
root@KaliLinux:~# ./arping.sh
Usage - ./arping.sh [input file]
Example - ./arping.sh iplist.txt
Example will perform an ARP scan of all IP addresses defined in iplist.txt
root@KaliLinux:~# ./arping.sh iplist.txt
172.16.36.1
172.16.36.2
172.16.36.132
172.16.36.135
172.16.36.254
在沒有提供任何參數的情況下執行腳本將返回腳本的用法。 此用法表示,應提供輸入文件作為參數。 此操作完成后將執行腳本,并從輸入的 IP 地址列表返回實時 IP 地址列表。 使用與前面討論的相同的方式,此腳本的輸出可以通過尖括號輕易重定向到輸出文件。 一個例子如下:
root@KaliLinux:~# ./arping.sh iplist.txt > output.txt
root@KaliLinux:~# ls output.txt
output.txt
root@KaliLinux:~# cat output.txt
172.16.36.1
172.16.36.2
172.16.36.132
172.16.36.135
172.16.36.254
一旦輸出重定向到輸出文件,你可以使用ls
命令驗證文件是否已寫入文件系統,或者可以使用cat
命令查看文件的內容。
工作原理
ARPing 是一個工具,用于驗證單個主機是否在線。 然而,它的簡單用法的使我們很容易操作它在 bash 中按順序掃描多個主機。 這是通過循環遍歷一系列 IP 地址,然后將這些 IP 地址作為參數提供給工具來完成的。
2.3 使用 Nmap 探索第二層
網絡映射器(Nmap)是 Kali Linux 中最有效和強大的工具之一。 Nmap 可以用于執行大范圍的多種掃描技術,并且可高度定制。 這個工具在整本書中會經常使用。 在這個特定的秘籍中,我們將討論如何使用 Nmap 執行第2層掃描。
準備
要使用 ARPing 執行 ARP 發現,你需要在 LAN 上至少擁有一個響應 ARP 請求的系統。 提供的示例使用 Linux 和 Windows 系統的組合。 有關在本地實驗環境中設置系統的更多信息,請參閱第一章入中的“安裝 Metasploitable2”和“安裝 Windows Server”秘籍。
操作步驟
Nmap 是使用單個命令執行自動化第二層發現掃描的另一個方案。 -sn
選項在 Nmap 中稱為ping
掃描。 雖然術語“ping 掃描”自然會導致你認為正在執行第三層發現,但實際上是自適應的。 假設將同一本地子網上的地址指定為參數,可以使用以下命令執行第2層掃描:
root@KaliLinux:~# nmap 172.16.36.135 -sn
Starting Nmap 6.25 ( http://nmap.org ) at 2013-12-16 15:40 EST
Nmap scan report for 172.16.36.135
Host is up (0.00038s latency).
MAC Address: 00:0C:29:3D:84:32 (VMware)
Nmap done: 1 IP address (1 host up) scanned in 0.17 seconds
此命令向 LAN 廣播地址發送 ARP 請求,并根據接收到的響應確定主機是否處于活動狀態。 或者,如果對不活動主機的 IP 地址使用該命令,則響應會表示主機關閉:
root@KaliLinux:~# nmap 172.16.36.136 -sn
Starting Nmap 6.25 ( http://nmap.org ) at 2013-12-16 15:51 EST
Note: Host seems down. If it is really up, but blocking our ping probes, try -Pn
Nmap done: 1 IP address (0 hosts up) scanned in 0.41 seconds
我們可以修改此命令,來使用破折號符號對一系列順序 IP 地址執行第2層發現。 要掃描完整的/ 24
范圍,可以使用0-255
:
root@KaliLinux:~# nmap 172.16.36.0-255 -sn
Starting
Nmap 6.25 ( http://nmap.org ) at 2013-12-11 05:35 EST
Nmap scan report for 172.16.36.1
Host is up (0.00027s latency).
MAC Address: 00:50:56:C0:00:08 (VMware)
Nmap scan report for 172.16.36.2
Host is up (0.00032s latency).
MAC Address: 00:50:56:FF:2A:8E (VMware)
Nmap scan report for 172.16.36.132
Host is up.
Nmap scan report for 172.16.36.135
Host is up (0.00051s latency).
MAC Address: 00:0C:29:3D:84:32 (VMware)
Nmap scan report for 172.16.36.200
Host is up (0.00026s latency).
MAC Address: 00:0C:29:23:71:62 (VMware)
Nmap scan report for 172.16.36.254
Host is up (0.00015s latency).
MAC Address: 00:50:56:EA:54:3A (VMware)
Nmap done: 256 IP addresses (6 hosts up) scanned in 3.22 seconds
使用此命令將向該范圍內的所有主機發送 ARP 廣播請求,并確定每個主動響應的主機。 也可以使用-iL
選項對 IP 地址的輸入列表執行此掃描:
root@KaliLinux:~# nmap -iL iplist.txt -sn
Starting Nmap 6.25 ( http://nmap.org ) at 2013-12-16 16:07 EST
Nmap scan report for 172.16.36.2
Host is up (0.00026s latency).
MAC Address: 00:50:56:FF:2A:8E (VMware)
Nmap scan report for 172.16.36.1
Host is up (0.00021s latency).
MAC Address: 00:50:56:C0:00:08 (VMware)
Nmap scan report for 172.16.36.132
Host is up (0.00031s latency).
MAC Address: 00:0C:29:65:FC:D2 (VMware)
Nmap scan report for 172.16.36.135
Host is up (0.00014s latency).
MAC Address: 00:0C:29:3D:84:32 (VMware)
Nmap scan report for 172.16.36.180
Host is up.
Nmap scan report for 172.16.36.254
Host is up (0.00024s latency).
MAC Address: 00:50:56:EF:B9:9C (VMware)
Nmap done: 8 IP addresses (6 hosts up) scanned in 0.41 seconds
當使用-sn
選項時,Nmap 將首先嘗試使用第2層 ARP 請求定位主機,并且如果主機不位于 LAN 上,它將僅使用第3層 ICMP 請求。 注意對本地網絡(在172.16.36.0/24
專用范圍)上的主機執行的 Nmap ping 掃描才能返回 MAC 地址。 這是因為 MAC 地址由來自主機的 ARP 響應返回。 但是,如果對不同 LAN 上的遠程主機執行相同的 Nmap ping 掃描,則響應不會包括系統的 MAC 地址。
root@KaliLinux:~# nmap -sn 74.125.21.0-255
Starting Nmap 6.25 ( http://nmap.org ) at 2013-12-11 05:42 EST
Nmap scan report for 74.125.21.0
Host is up (0.0024s latency).
Nmap scan report for 74.125.21.1
Host is up (0.00017s latency).
Nmap scan report for 74.125.21.2
Host is up (0.00028s latency).
Nmap scan report for 74.125.21.3
Host is up (0.00017s latency).
當對遠程網絡范圍(公共范圍74.125.21.0/24
)執行時,你可以看到,使用了第三層發現,因為沒有返回 MAC 地址。 這表明,Nmap 會盡可能自動利用第二層發現的速度,但在必要時,它將使用可路由的 ICMP 請求,在第三層上發現遠程主機。如果你使用 Wireshark 監控流量,而 Nmap 對本地網絡上的主機執行 ping 掃描。 在以下屏幕截圖中,你可以看到 Nmap 利用 ARP 請求來識別本地段范圍內的主機:
工作原理
Nmap 已經高度功能化,需要很少甚至無需調整就可以運行所需的掃描。 底層的原理是一樣的。 Nmap 將 ARP 請求發送到一系列 IP 地址的廣播地址,并通過標記響應來識別活動主機。 但是,由于此功能已集成到 Nmap 中,因此可以通過提供適當的參數來執行。
2.4 使用 NetDiscover 探索第二層
NetDiscover是一個工具,用于通過 ARP 主動和被動分析識別網絡主機。 它主要是在無線接口上使用; 然而,它在其它環境中上也具有功能。 在這個特定的秘籍中,我們將討論如何使用 NetDiscover 進行主動和被動掃描。
準備
要使用 NetDiscover 執行 ARP 發現,你需要在 LAN 上至少擁有一個響應 ARP 請求的系統。 提供的示例使用 Linux 和 Windows 系統的組合。 有關在本地實驗環境中設置系統的更多信息,請參閱第一章入中的“安裝 Metasploitable2”和“安裝 Windows Server”秘籍。
操作步驟
NetDiscover 是專門為執行第2層發現而設計的工具。 NetDiscover 可以用于掃描一系列 IP 地址,方法是使用-r
選項以 CIDR 表示法中的網絡范圍作為參數。 輸出將生成一個表格,其中列出了活動 IP 地址,相應的 MAC 地址,響應數量,響應的長度和 MAC 廠商:
root@KaliLinux:~# netdiscover -r 172.16.36.0/24
Currently scanning: Finished! | Screen View: Unique Hosts
5 Captured ARP Req/Rep packets, from 5 hosts. Total size: 300
________________________________________________________________________ _____
IP At MAC Address Count Len MAC Vendor
----------------------------------------------------------------------------
172.16.36.1 00:50:56:c0:00:08 01 060 VMWare, Inc.
172.16.36.2 00:50:56:ff:2a:8e 01 060 VMWare, Inc.
172.16.36.132 00:0c:29:65:fc:d2 01 060 VMware, Inc.
172.16.36.135 00:0c:29:3d:84:32 01 060 VMware, Inc.
172.16.36.254 00:50:56:ef:b9:9c 01 060 VMWare, Inc.
NetDiscover 還可用于掃描來自輸入文本文件的 IP 地址。 不是將 CIDR 范圍符號作為參數傳遞,-l
選項可以與輸入文件的名稱或路徑結合使用:
root@KaliLinux:~# netdiscover -l iplist.txt
Currently scanning: 172.16.36.0/24 | Screen View: Unique Hosts
39 Captured ARP Req/Rep packets, from 5 hosts. Total size: 2340
________________________________________________________________________ _____
IP At MAC Address Count Len MAC Vendor ----------------------------------------------------------------------------
172.16.36.1 00:50:56:c0:00:08 08 480 VMWare, Inc.
172.16.36.2 00:50:56:ff:2a:8e 08 480 VMWare, Inc.
172.16.36.132 00:0c:29:65:fc:d2 08 480 VMware, Inc.
172.16.36.135 00:0c:29:3d:84:32 08 480 VMware, Inc.
172.16.36.254 00:50:56:ef:b9:9c 07 420 VMWare, Inc.
將此工具與其他工具區分開的另一個獨特功能是執行被動發現的功能。 對整個子網中的每個 IP 地址 ARP 廣播請求有時可以觸發來自安全設備(例如入侵檢測系統(IDS)或入侵防御系統(IPS))的警報或響應。 更隱秘的方法是偵聽 ARP 流量,因為掃描系統自然會與網絡上的其他系統交互,然后記錄從 ARP 響應收集的數據。 這種被動掃描技術可以使用-p
選項執行:
root@KaliLinux:~# netdiscover -p
Currently scanning: (passive) | Screen View: Unique Hosts
4 Captured ARP Req/Rep packets, from 2 hosts. Total size: 240
________________________________________________________________________ _____
IP At MAC Address Count Len MAC Vendor
----------------------------------------------------------------------------
172.16.36.132 00:0c:29:65:fc:d2 02 120 VMware, Inc.
172.16.36.135 00:0c:29:3d:84:32 02 120 VMware, Inc.
這種技術在收集信息方面明顯更慢,因為請求必須作為正常網絡交互的結果產生,但是它也不會引起任何不必要的注意。 如果它在無線網絡上運行,這種技術更有效,因為混雜模式下,無線適配器會接收到目標是其他設備的 ARP 應答。 為了在交換環境中有效工作,你需要訪問 SPAN 或 TAP,或者需要重載 CAM 表來強制交換機開始廣播所有流量。
工作原理
NetDiscover ARP 發現的基本原理與我們之前所討論的第2層發現方法的基本相同。 這個工具和我們討論的其他一些工具的主要區別,包括被動發現模式,以及在輸出中包含 MAC 廠商。 在大多數情況下,被動模式在交換網絡上是無用的,因為 ARP 響應的接收仍然需要與發現的客戶端執行一些交互,盡管它們獨立于 NetDiscover 工具。 然而,重要的是理解該特征,及其它們在例如集線器或無線網絡的廣播網絡中可能會有用。 NetDiscover 通過評估返回的 MAC 地址的前半部分(前3個字節/ 24位)來識別 MAC 廠商。 這部分地址標識網絡接口的制造商,并且通常是設備其余部分的硬件制造商的良好標識。
2.5 使用 Metasploit 探索第二層
Metasploit 主要是漏洞利用工具,這個功能將在接下來的章節中詳細討論。 然而,除了其主要功能之外,Metasploit 還有一些輔助模塊,可用于各種掃描和信息收集任務。 特別是,由一個輔助模塊可以用于在本地子網上執行 ARP 掃描。 這對許多人都有幫助,因為 Metasploit 是大多數滲透測試人員熟悉的工具,并且將該功能集成到 Metasploit 中,減少了給定測試階段內所需的工具總數。 這個特定的秘籍演示了如何使用 Metasploit 來執行 ARP 發現。
準備
要使用 Metasploit 執行 ARP 發現,你需要在 LAN 上至少擁有一個響應 ARP 請求的系統。 提供的示例使用 Linux 和 Windows 系統的組合。 有關在本地實驗環境中設置系統的更多信息,請參閱第一章入中的“安裝 Metasploitable2”和“安裝 Windows Server”秘籍。
操作步驟
雖然經常被認為是一個利用框架,Metasploit 也有大量的輔助模塊,可用于掃描和信息收集。 特別是有一個可以用于執行第二層發現的輔助模塊。 要啟動 Metasploit 框架,請使用msfconsole
命令。 然后,使用命令結合所需的模塊來配置掃描:
root@KaliLinux:~# msfconsole
MMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMMM
MMMMMMMMMMM MMMMMMMMMM
MMMN$ vMMMM
MMMNl MMMMM MMMMM JMMMM
MMMNl MMMMMMMN NMMMMMMM JMMMM
MMMNl MMMMMMMMMNmmmNMMMMMMMMM JMMMM
MMMNI MMMMMMMMMMMMMMMMMMMMMMM jMMMM
MMMNI MMMMMMMMMMMMMMMMMMMMMMM jMMMM
MMMNI MMMMM MMMMMMM MMMMM jMMMM
MMMNI MMMMM MMMMMMM MMMMM jMMMM
MMMNI MMMNM MMMMMMM MMMMM jMMMM
MMMNI WMMMM MMMMMMM MMMM# JMMMM
MMMMR ?MMNM MMMMM .dMMMM
MMMMNm `?MMM MMMM` dMMMMM
MMMMMMN ?MM MM? NMMMMMN
MMMMMMMMNe JMMMMMNMMM
MMMMMMMMMMNm, eMMMMMNMMNMM
MMMMNNMNMMMMMNx MMMMMMNMMNMMNM MMMMMMMMNMMNMMMMm+..+MMNMMNMNMMNMMNMM
http://metasploit.pro
Frustrated with proxy pivoting? Upgrade to layer-2 VPN pivoting with Metasploit Pro -- type 'go_pro' to launch it now.
=[ metasploit v4.6.0-dev [core:4.6 api:1.0]
+ -- --=[ 1053 exploits - 590 auxiliary - 174 post
+ -- --=[ 275 payloads - 28 encoders - 8 nops
msf > use auxiliary/scanner/discovery/arp_sweep
msf auxiliary(arp_sweep) >
選擇模塊后,可以使用show options
命令查看可配置選項:
msf auxiliary(arp_sweep) > show options
Module options (auxiliary/scanner/discovery/arp_sweep):
Name Current Setting Required Description
---- --------------- -------- ----------
INTERFACE no The name of the interface
RHOSTS yes The target address range or CIDR identifier
SHOST no Source IP Address
SMAC no Source MAC Address
THREADS 1 yes The number of concurrent threads
TIMEOUT 5 yes The number of seconds to wait for new data
這些配置選項指定要掃描的目標,掃描系統和掃描設置的信息。 可以通過檢查掃描系統的接口配置來收集用于該特定掃描的大多數信息。 我們可以十分方便地在 Metasploit Framework 控制臺中可以傳入系統 shell 命令。 在以下示例中,我們在不離開 Metasploit Framework 控制臺界面的情況下,進行系統調用來執行ifconfig
:
msf auxiliary(arp_sweep) > ifconfig eth1
[*] exec: ifconfig eth1
eth1 Link encap:Ethernet HWaddr 00:0c:29:09:c3:79
inet addr:172.16.36.180 Bcast:172.16.36.255 Mask:255.255.255.0
inet6 addr: fe80::20c:29ff:fe09:c379/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:1576971 errors:1 dropped:0 overruns:0 frame:0
TX packets:1157669 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:226795966 (216.2 MiB) TX bytes:109929055 (104.8 MiB)
Interrupt:19 Base address:0x2080
用于此掃描的接口是eth1
。 由于第二層掃描僅能夠有效地識別本地子網上的活動主機,因此我們應該查看掃描系統 IP 和子網掩碼以確定要掃描的范圍。 在這種情況下,IP 地址和子網掩碼顯示,我們應掃描172.16.36.0/24
范圍。 此外,可以在這些配置中識別掃描系統的源 IP 地址和 MAC 地址。 要在 Metasploit 中定義配置,請使用set
命令,然后是要定義的變量,然后是要賦的值:
msf auxiliary(arp_sweep) > set interface eth1
interface => eth1
msf auxiliary(arp_sweep) > set RHOSTS 172.16.36.0/24
RHOSTS => 172.16.36.0/24
msf auxiliary(arp_sweep) > set SHOST 172.16.36.180
SHOST => 172.16.36.180
msf auxiliary(arp_sweep) > set SMAC 00:0c:29:09:c3:79
SMAC => 00:0c:29:09:c3:79
msf auxiliary(arp_sweep) > set THREADS 20
THREADS => 20
msf auxiliary(arp_sweep) > set TIMEOUT 1
TIMEOUT => 1
設置掃描配置后,可以使用show options
命令再次查看設置。 現在應顯示之前設置的所有值:
msf auxiliary(arp_sweep) > show options
Module options (auxiliary/scanner/discovery/arp_sweep):
Name Current Setting Required Description
---- --------------- -------- ----------
INTERFACE eth1 no The name of the interface
RHOSTS 172.16.36.0/24 yes The target address range or CIDR identifier
SHOST 172.16.36.180 no Source IP Address
SMAC 00:0c:29:09:c3:79 no Source MAC Address
THREADS 20 yes The number of concurrent threads
TIMEOUT 1 yes The number of seconds to wait for new data
在驗證所有設置配置正確后,可以使用run
命令啟動掃描。 此特定模塊將打印出使用 ARP 發現的任何活動主機。 它還會識別網卡(NIC)供應商,它由發現的主機的 MAC 地址中的前3個字節定義:
msf auxiliary(arp_sweep) > run
[*] 172.16.36.1 appears to be up (VMware, Inc.).
[*] 172.16.36.2 appears to be up (VMware, Inc.).
[*] 172.16.36.132 appears to be up (VMware, Inc.).
[*] 172.16.36.135 appears to be up (VMware, Inc.).
[*] 172.16.36.254 appears to be up (VMware, Inc.).
[*] Scanned 256 of 256 hosts (100% complete)
[*] Auxiliary module execution completed
工作原理
Metasploit 執行 ARP 發現的基本原理是相同的:廣播一系列 ARP 請求,記錄并輸出 ARP 響應。 Metasploit 輔助模塊的輸出提供所有活動系統的 IP 地址,然后,它還在括號中提供 MAC 廠商名稱。
2.6 使用 ICMP 探索第三層
第三層的發現可能是網絡管理員和技術人員中最常用的工具。 第三層的發現使用著名的 ICMP ping 來識別活動主機。 此秘籍演示了如何使用 ping 工具在遠程主機上執行第三層發現。
準備
使用ping
執行第三層發現不需要實驗環境,因為 Internet 上的許多系統都將回復 ICMP 回顯請求。但是,強烈建議你只在您自己的實驗環境中執行任何類型的網絡掃描,除非你完全熟悉您受到任何管理機構施加的法律法規。如果你希望在實驗環境中執行此技術,你需要至少有一個響應 ICMP 請求的系統。在提供的示例中,使用 Linux 和 Windows 系統的組合。有關在本地實驗環境中設置系統的更多信息,請參閱第一章中的“安裝 Metasploitable2”和“安裝 Windows Server”秘籍。此外,本節還需要使用文本編輯器(如 VIM 或 Nano)將腳本寫入文件系統。有關編寫腳本的更多信息,請參閱第一章中的“使用文本編輯器(VIM 和 Nano)”秘籍。
操作步驟
大多數在 IT 行業工作的人都相當熟悉ping
工具。 要使用ping
確定主機是否處于活動狀態,你只需要向命令傳遞參數來定義要測試的 IP 地址:
root@KaliLinux:~# ping 172.16.36.135
PING 172.16.36.135 (172.16.36.135) 56(84) bytes of data.
64 bytes from 172.16.36.135: icmp_req=1 ttl=64 time=1.35 ms
64 bytes from 172.16.36.135: icmp_req=2 ttl=64 time=0.707 ms
64 bytes from 172.16.36.135: icmp_req=3 ttl=64 time=0.369 ms
^C
--- 172.16.36.135 ping statistics --
3 packets transmitted, 3 received, 0% packet loss, time 2003ms
rtt min/avg/max/mdev = 0.369/0.809/1.353/0.409 ms
發出此命令時,ICMP 回顯請求將直接發送到提供的 IP 地址。 為了接收對此 ICMP 回顯請求的回復,必須滿足幾個條件。 這些條件如下:
- 測試的 IP 地址必須分配給系統
- 系統必須處于活動狀態并在線
- 必須存在從掃描系統到目標 IP 的可用路由
- 系統必須配置為響應 ICMP 流量
- 掃描系統和配置為丟棄 ICMP 流量的目標 IP 之間沒有基于主機或網絡防火墻
你可以看到,有很多變量成為 ICMP 發現的成功因素。 正是由于這個原因,ICMP 可能有點不可靠,但與 ARP 不同,它是一個可路由的協議,可用于發現局域網外的主機。 請注意,在前面的示例中,在ping
命令顯示的輸出中出現^ C
。 這表示使用了轉義序列(具體來說,Ctrl + C
)來停止進程。 與 Windows 不同,默認情況下,集成到 Linux 操作系統的ping
命令會無限ping
目標主機。 但是,-c
選項可用于指定要發送的 ICMP 請求數。 使用此選項,一旦達到超時或每個發送的數據包的回復已接收,過程將正常結束。 看看下面的命令:
root@KaliLinux:~# ping 172.16.36.135 -c 2
PING 172.16.36.135 (172.16.36.135) 56(84) bytes of data.
64 bytes from 172.16.36.135: icmp_req=1 ttl=64 time=0.611 ms
64 bytes from 172.16.36.135: icmp_req=2 ttl=64 time=0.395 ms
--- 172.16.36.135 ping statistics --
2 packets transmitted, 2 received, 0% packet loss, time 1000ms
rtt min/avg/max/mdev = 0.395/0.503/0.611/0.108 ms
與 ARPing 相同的方式可以在 bash 腳本中使用,通過并行地循環遍歷多個 IP,ping
可以與 bash 腳本結合使用,來在多個主機上并行執行第三層發現。 為了編寫腳本,我們需要確定與成功和失敗的 ping 請求相關的各種響應。 為此,我們應該首先 ping 一個我們知道它活動并響應 ICMP 的主機,然后使用 ping 請求跟蹤一個無響應的地址。 以下命令演示了這一點:
root@KaliLinux:~# ping 74.125.137.147 -c 1
PING 74.125.137.147 (74.125.137.147) 56(84) bytes of data.
64 bytes from 74.125.137.147: icmp_seq=1 ttl=128 time=31.3 ms
--- 74.125.137.147 ping statistics --
1 packets transmitted, 1 received, 0% packet loss, time 0ms
rtt min/avg/max/mdev = 31.363/31.363/31.363/0.000 ms
root@KaliLinux:~# ping 83.166.169.231 -c 1
PING 83.166.169.231 (83.166.169.231) 56(84) bytes of data.
--- 83.166.169.231 ping statistics --
1 packets transmitted, 0 received, 100% packet loss, time 0ms
與 ARPing 請求一樣,來自唯一字符串的字節只存在在與活動 IP 地址相關的輸出中,并且也位于包含此地址的行上。 使用同樣的方式,我們可以使用grep
和cut
的組合,從任何成功的ping
請求中提取 IP 地址:
root@KaliLinux:~# ping 74.125.137.147 -c 1 | grep "bytes from"
64 bytes from 74.125.137.147: icmp_seq=1 ttl=128 time=37.2 ms
root@KaliLinux:~# ping 74.125.137.147 -c 1 | grep "bytes from" | cut -d " " -f 4
74.125.137.147:
root@KaliLinux:~# ping 74.125.137.147 -c 1 | grep "bytes from" | cut -d " " -f 4 | cut -d ":" -f 1
74.125.137.147
通過在包含一系列目標 IP 地址的循環中使用此任務序列,我們可以快速識別響應 ICMP 回顯請求的活動主機。 輸出是一個簡單的的活動 IP 地址列表。 使用此技術的示例腳本如下所示:
#!/bin/bash
if [ "$#" -ne 1 ]; then
echo "Usage - ./ping_sweep.sh [/24 network address]"
echo "Example - ./ping_sweep.sh 172.16.36.0"
echo " Example will perform an ICMP ping sweep of the 172.16.36.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@KaliLinux:~# ./ping_sweep.sh
Usage - ./ping_sweep.sh [/24 network address]
Example - ./ping_sweep.sh 172.16.36.0
Example will perform an ICMP ping sweep of the 172.16.36.0/24 network
root@KaliLinux:~# ./ping_sweep.sh 172.16.36.0
172.16.36.2
172.16.36.1
172.16.36.232
172.16.36.249
當在沒有提供任何參數的情況下執行時,腳本會返回用法。 但是,當使用網絡地址值執行時,任務序列開始執行,并返回活動 IP 地址的列表。 如前面的腳本中所討論的那樣,此腳本的輸出也可以重定向到文本文件,來供將來使用。 這可以使用尖括號,后跟輸出文件的名稱來實現。
root@KaliLinux:~# ./ping_sweep.sh 172.16.36.0 > output.txt
root@KaliLinux:~# ls output.txt output.txt
root@KaliLinux:~# cat output.txt 172.16.36.2
172.16.36.1
172.16.36.232
172.16.36.249
在提供的示例中,ls
命令用于確認輸出文件已創建。 通過將文件名作為參數傳遞給cat
命令,可以查看此輸出文件的內容。
工作原理
Ping 是 IT 行業中眾所周知的工具,其現有功能能用于識別活動主機。 然而,它的目的是為了發現單個主機是否存活,而不是作為掃描工具。 這個秘籍中的 bash 腳本基本上與在/ 24
CIDR范圍中對每個可能的 IP 地址使用 ping 相同。 但是,我們不需要手動執行這種繁瑣的任務,bash 允許我們通過循環傳遞任務序列來快速,輕松地執行此任務。