Kali Linux 網絡掃描秘籍 第二章 探索掃描(一)

第二章 探索掃描(一)

作者:Justin Hutchens

譯者:飛龍

協議:CC BY-NC-SA 4.0

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系統調用,該調用也使用grepcut從作為參數提供的本地接口提取 IP 地址。然后將此輸出賦給ip變量。然后使用split函數從 IP 地址字符串中提取/ 24網絡前綴。例如,如果ip變量包含192.168.11.4字符串,則值為192.168.11。它將賦給prefix變量。最后一個代碼塊是一個用于執行實際掃描的for循環。 for循環遍歷介于 0 和 254 之間的所有值,并且對于每次迭代,該值隨后附加到網絡前綴后面。在早先提供的示例的中,將針對192.168.11.0192.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 地址相關的輸出中,并且也位于包含此地址的行上。 使用同樣的方式,我們可以使用grepcut的組合,從任何成功的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 允許我們通過循環傳遞任務序列來快速,輕松地執行此任務。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,197評論 6 531
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,415評論 3 415
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,104評論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,884評論 1 309
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,647評論 6 408
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,130評論 1 323
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,208評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,366評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,887評論 1 334
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,737評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,939評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,478評論 5 358
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,174評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,586評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,827評論 1 283
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,608評論 3 390
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,914評論 2 372

推薦閱讀更多精彩內容