In qualità di amministratore di sistema per un sistema VOS, in genere non ti interessa quali altri host si trovano sulla sottorete locale. Ti interessano i gateway configurati e, naturalmente, tutti gli host locali che comunicano con il tuo sistema, ma gli altri host non rientrano nel tuo campo di interesse. Ci sono però due ottimi motivi per sapere chi sono i tuoi vicini di rete. Innanzitutto, in caso di problemi di comunicazione, puoi usare questi altri host per testare la tua connessione di rete. In secondo luogo, questi sono gli host che più probabilmente potrebbero essere la fonte di qualsiasi tipo di attacco basato sulla rete.
Non è una cattiva idea eseguire una scansione della sottorete locale ogni tanto (ad esempio ogni mercoledì mattina) solo per vedere chi c'è in giro. VOS non dispone di uno scanner integrato, ma ha il comando ping che, se circondato da alcune righe di una macro di comando, può essere trasformato in uno scanner.
&set X 1
&while &X& < 255ping 192.168.11.&X&&set X (calc &X& + 1)&endCi sono 3 problemi nell'uso del ping per la scansione degli host. Innanzitutto, non è molto efficiente. Il timeout predefinito è di 15 secondi e il comando effettua 4 tentativi, quindi ci vorrà un minuto per eseguire la scansione di un host che non è presente o che non risponde ai ping. Fortunatamente, il numero di tentativi può essere ridotto a 1 e il timeout a 1 secondo. Questo non è ancora efficiente dal punto di vista di uno strumento di scansione dedicato, ma penso che sia sufficiente per le nostre esigenze.
&set X 1&while &X& < 255ping 192.168.11.&X& -count 1 -timeout 1< &set X (calc &X& + 1)&end
Il secondo problema è che non tutti gli host rispondono ai ping. Tuttavia, questo non è un problema significativo perché con una sola riga in più la nostra macro di comando segnalerà 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 inserisce 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& < 255ping 192.168.11.&X& -count 1 -timeout 1arp 192.168.11.&X&&set X (calc &X& + 1)&endLa macro di comando sopra riportata contiene richieste e risposte ping mescolate con dati ARP, quindi non è molto leggibile. La macro seguente produce una tabella chiara dei vicini in un file denominato arp_scan.(data).out. Presuppone una rete di classe C, ovvero i primi 3 ottetti sono fissi e la scansione riguarda gli host da 1 a 254. Si consiglia di eseguirla come processo avviato.
& arp_scan.cm begins here&& arp_scan.cm& version 1.0 09-04-06&&begin_parametersBASE 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& < 255ping &BASE&.&X& -count 1 -timeout 1attach_default_output &FILE& -appendarp &BASE&.&X&detach_default_output&set X (calc &X& + 1)&enddisplay &FILE& -match &BASE& -no_header -output_path arp_scan.(date).out&& arp_scan ends hereIl timeout della cache ARP è di 10 minuti. Se è presente una voce con un tempo inferiore a 10 minuti, significa che il modulo era già in comunicazione con quell'host prima dell'esecuzione della scansione.
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 mins164.152.77.12 00-00-A8-80-81-EC temp 9 mins164.152.77.100 00-0C-29-A9-85-44 temp 10 mins164.152.77.103 00-04-0D-E8-B8-44 temp 2 mins164.152.77.111 00-19-E7-8E-EA-38 temp 10 mins164.152.77.114 00-04-0D-4A-DD-C6 temp 5 mins164.152.77.116 00-04-0D-4A-BF-50 temp 10 mins164.152.77.143 00-07-3B-CE-19-46 temp 8 mins164.152.77.147 00-07-3B-91-BE-51 temp 8 mins. . .Il terzo problema è il reclamo che potresti ricevere dal tuo amministratore di rete per aver eseguito una scansione attiva della rete. Se si oppongono a questa attività, puoi eseguire una scansione passiva utilizzando il comando packet monitor per acquisire i pacchetti di trasmissione.
packet_monitor -numeric -filter -no_transmit -ip -mac_dst ff:ff:ff:ff:ff:ff -filter -no_transmit -arpL'utilizzo di questa tecnica richiede che gli altri host della rete comunichino attivamente e inviino trasmissioni mentre packet_monitor è in esecuzione. Se si utilizza questa tecnica, sarà necessario lasciare packet_monitor in esecuzione per un po' di tempo, la cui durata dipenderà dalla rete. Si consiglia di inserire il comando sopra riportato in una macro di comando (packet_monitor_scan.cm) ed eseguirlo come processo avviato. Non dimenticare di eseguire il processo come privilegiato.
Una volta ottenuta la traccia, sarà necessario convertirla in una tabella di indirizzi utilizzabile. La seguente macro eseguirà questa operazione (presupponendo che packet_monitor_scan fosse un processo avviato che generava 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-120.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. . . 