In qualità di amministratore di sistema di un sistema VOS, in genere non ti interessa affatto sapere quali altri host si trovino sulla sottorete locale. Ti interessano i gateway configurati e, ovviamente, gli host locali che comunicano con il tuo sistema, ma gli altri host non rientrano nelle tue priorità. Ci sono, tuttavia, due ottimi motivi per sapere chi sono i tuoi vicini di rete. In primo luogo, in caso di problemi di comunicazione, puoi utilizzare questi altri host per testare la tua connessione di rete. In secondo luogo, questi sono gli host che con maggiore probabilità 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 inserito in 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)&endL'uso del comando ping per la scansione degli host presenta tre problemi. 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 esiste 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 rappresenta un problema rilevante perché, con l’aggiunta di una sola riga, 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. Invia quindi 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 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 presenta le richieste e le risposte di ping mescolate ai dati ARP, il che la rende poco leggibile. La macro seguente genera una tabella chiara dei vicini in un file denominato arp_scan.(data).out. Si basa su una rete di classe C, ovvero i primi 3 ottetti sono fissi, ed esegue la scansione degli host da 1 a 254. Ti consiglio di eseguirla come processo in background.
& 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 stava già comunicando con quell'host prima che venisse eseguita la 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 è la possibile lamentela da parte dell'amministratore di rete per aver eseguito una scansione attiva della rete. Se l'amministratore si oppone a questa attività, è possibile eseguire una scansione passiva utilizzando il comando di monitoraggio dei pacchetti per acquisire i pacchetti di broadcast.
packet_monitor -numeric -filter -no_transmit -ip -mac_dst ff:ff:ff:ff:ff:ff -filter -no_transmit -arpL'utilizzo di questa tecnica presuppone che gli altri host della rete comunichino attivamente e inviano messaggi di broadcast mentre packet_monitor è in esecuzione. Se si utilizza questa tecnica, sarà necessario lasciare packet_monitor in esecuzione per un bel po' di tempo; la durata dipenderà dalla propria rete. Suggerisco 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 con privilegi.
Una volta ottenuta una traccia, sarà necessario convertirla in una tabella di indirizzi utilizzabile. La macro seguente svolge questa operazione (si presuppone che il processo packet_monitor_scan sia stato avviato e abbia generato 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 il che produrrà la tabella seguente.
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. . . 