Come amministratore di sistema per un sistema VOS, di solito non ci si può preoccupare di ciò che gli altri host sono nella sottorete locale. Vi preoccupate dei gateway che sono configurati e naturalmente di tutti gli host locali che comunicano con il vostro sistema, ma gli altri host sono al di sotto del vostro radar. Ci sono, comunque, 2 ottime ragioni per sapere chi sono i vostri vicini di rete. In primo luogo, in caso di problemi di comunicazione, potete usare questi altri host per testare la vostra connessione di rete. In secondo luogo, questi sono gli host che più probabilmente sono la fonte di qualsiasi tipo di attacco basato sulla rete.
Non è una cattiva idea scansionare la subnet locale ogni tanto (diciamo ogni mercoledì mattina) solo per vedere chi c'è là fuori. VOS non ha uno scanner integrato - ma ha il comando ping, che quando è circondato da poche righe di una macro di comando può essere trasformato in uno scanner.
&set X 1
&while &X& < 255
ping 192.168.11.&X&
&set X (calc &X& + 1)
&end
Ci sono 3 problemi con l'uso di ping per la ricerca di host. Primo, non è molto efficiente. Il time out predefinito è di 15 secondi e il comando proverà 4 volte, quindi ci vorrà un minuto per scansionare un host che non c'è o che non risponde ai ping. Per fortuna, il numero di tentativi può essere ridotto a 1 e il timeout ridotto a 1 secondo. Questo non è ancora efficiente dal punto di vista di uno strumento di scansione dedicato, ma penso che sia abbastanza buono per le nostre esigenze.
&set X 1
&while &X& < 255
ping 192.168.11.&X& -count 1 -timeout 1
< &set X (calc &X& + 1)
&end
Il secondo problema è che non tutti i padroni di casa risponderanno ai ping. Questo, tuttavia, non è un problema significativo perché con una sola riga in più la nostra macro di comando riporterà quali host hanno inviato una risposta ARP. Gli ARP vengono utilizzati per mappare un indirizzo IP in un indirizzo MAC Ethernet e VOS deve conoscere l'indirizzo MAC Ethernet prima di poter inviare il ping. Pertanto invia una richiesta ARP all'host di destinazione e posiziona i dati della risposta nella cache ARP. Tutti gli host risponderanno alla richiesta ARP con una risposta ARP anche se non risponderanno alla successiva richiesta di ping. Il comando arp visualizzerà la voce richiesta, se presente.
&set X 1
&while &X& < 255
ping 192.168.11.&X& -count 1 -timeout 1
arp 192.168.11.&X&
&set X (calc &X& + 1)
&end
La macro di comando di cui sopra ha le richieste di ping e le risposte intermixate con i dati ARP, non è molto leggibile. La macro seguente produce una bella tabella di vicini in un file chiamato arp_scan.(date).out. Essa assume una rete di classe C, cioè i primi 3 ottetti sono fissi e scansiona per gli host da 1 a 254. Suggerisco di eseguirlo come processo avviato.
& arp_scan.cm begins here
&
& arp_scan.cm
& version 1.0 09-04-06
&
&begin_parameters
BASE BASE:string,req
&end_parameters
&
& make sure extraneous stuff isn't echoed into the results file
&if (process_type) = 'batch' &then &do
<set_ready -format off
&echo no_command_lines
&end
&
&set X 1
&set_string FILE (process_dir)>arp_scan.out
&if (exists &FILE&)
&then delete_file &FILE& -no_ask
< &while &X& < 255
ping &BASE&.&X& -count 1 -timeout 1
attach_default_output &FILE& -append
arp &BASE&.&X&
detach_default_output
&set X (calc &X& + 1)
&end
display &FILE& -match &BASE& -no_header -output_path arp_scan.(date).out
&
& arp_scan ends here
Il timeout della cache ARP è di 10 minuti, Se c'è una voce con un tempo inferiore a 10 minuti si saprà che il modulo stava già comunicando con quell'host prima che la scansione fosse fatta.
d arp_scan.09-04-06.out
%phx_vos#m16_mas>SysAdmin>Noah_Davids>arp_scan.09-04-06.out 09-04-06 15:20:30 m
164.152.77.11 00-00-A8-80-80-4A temp 9 mins
164.152.77.12 00-00-A8-80-81-EC temp 9 mins
164.152.77.100 00-0C-29-A9-85-44 temp 10 mins
164.152.77.103 00-04-0D-E8-B8-44 temp 2 mins
164.152.77.111 00-19-E7-8E-EA-38 temp 10 mins
164.152.77.114 00-04-0D-4A-DD-C6 temp 5 mins
164.152.77.116 00-04-0D-4A-BF-50 temp 10 mins
164.152.77.143 00-07-3B-CE-19-46 temp 8 mins
164.152.77.147 00-07-3B-91-BE-51 temp 8 mins
. . .
Il terzo problema è il reclamo che potreste ricevere dal vostro amministratore di rete per la scansione attiva della rete. Se si oppongono a questa attività, è possibile effettuare una scansione passiva utilizzando il comando packet monitor per catturare i pacchetti di trasmissione.
packet_monitor -numeric -filter -no_transmit -ip -mac_dst ff:ff:ff:ff:ff:ff -filter -no_transmit -arp
L'utilizzo di questa tecnica si affida agli altri host della rete che comunicano e inviano attivamente le trasmissioni mentre il packet_monitor è in funzione. Se si usa questa tecnica si dovrà lasciare funzionare packet_monitor per un bel po' di tempo, quanto tempo dipenderà dalla rete. Suggerisco di mettere il comando di cui sopra in una macro di comando (packet_monitor_scan.cm) ed eseguirlo come processo avviato. Non dimenticate di eseguire il processo come privilegiato.
Una volta che si dispone di una traccia, è necessario convertirla in una tabella di indirizzi utilizzabili. La macro seguente lo farà (presuppone che packet_monitor_scan sia un processo avviato che genera un file process_packet_monitor_scan.out).
& process_packet_monitor_scan.cm begins here
&
& packet_monitor_scan.cm
& version 1.0 09-04-06
& version 1.1 09-06-12 Added progress messages
& [email protected]
&
& make sure extraneous stuff isn't echoed into the results file
&if (process_type) = 'batch' &then &do
set_ready -format off
&echo no_command_lines
&end
&
&
attach_default_output (process_dir)>packet_monitor_scan
&set LINE 1
&set_string TEXT &+
(translate (contents packet_monitor_scan.out &LINE& -hold) '_' ' ')
&while (substr &TEXT& 1 7) ^= 'Process'
&set_string SOURCE '_'
&if (substr &TEXT& 1 9) = 'R_ARP_Req' &then &do
&set_string SOURCE (substr &TEXT& 39)
&end
&if (substr &TEXT& 1 9) = 'R_ARP_Rep' &then &do
&set_string SOURCE (substr &TEXT& 59)
&end
&if (substr &TEXT& 1 3) = 'R__' &then &do
&set_string SOURCE (substr &TEXT& 15)
&end
&set I (calc (index &SOURCE& '_') - 1)
&if &SOURCE& ^= '_' &then display_line (substr &SOURCE& 1 &I&)
&set LINE (calc &LINE& + 1)
&if (mod &LINE& 1000) = 0
&then &do
detach_default_output
display_line working on line &LINE&
attach_default_output (process_dir)>packet_monitor_scan -append
&end
&set_string TEXT (translate (contents packet_monitor_scan.out &LINE&) '_' ' ')
&end
detach_default_output
display_line doing sort
sort (process_dir)>packet_monitor_scan -duplicates_path (process_dir)>dups
copy_file &+
(process_dir)>packet_monitor_scan packet_monitor_scan.(date).out -delete
display_line packet_monitor_scan.(date).out created
&
& process_packet_monitor_scan.cm ends here
che produrrà la seguente tabella.
d packet_monitor_scan.09-06-12.out
%phx_vos#m16_mas>SysAdmin>Noah_Davids>packet_monitor_scan.09-06-12.out 09-06-12
0.0.0.0
10.10.1.10
10.10.1.11
10.10.1.2
10.10.1.20
10.10.1.21
10.10.1.22
10.10.1.23
10.10.1.75
10.20.1.2
10.20.1.21
10.20.1.26
10.20.1.27
10.20.1.3
10.20.1.30
. . .