Como administrador de um sistema VOS, normalmente você não se importa com quais outros hosts estão na sub-rede local. Você se preocupa com os gateways configurados e, é claro, com quaisquer hosts locais que se comuniquem com o seu sistema, mas os demais hosts ficam fora do seu radar. Existem, no entanto, duas razões muito boas para saber quem são seus vizinhos de rede. Primeiro, em caso de um problema de comunicação, você pode usar esses outros hosts para testar sua conexão de rede. Segundo, esses são os hosts que têm maior probabilidade de serem as fontes de qualquer tipo de ataque baseado na rede.
Não é má ideia fazer uma varredura na sub-rede local de vez em quando (digamos, todas as quartas-feiras de manhã) apenas para ver quem está conectado. O VOS não possui um scanner integrado – mas dispõe do comando ping, que, quando envolto por algumas linhas de uma macro de comando, pode ser transformado em um scanner.
&set X 1
&while &X& < 255ping 192.168.11.&X&&set X (calc &X& + 1)&endExistem três problemas ao usar o ping para escanear hosts. Primeiro, não é muito eficiente. O tempo limite padrão é de 15 segundos e o comando tentará quatro vezes, portanto, levará um minuto para escanear um host que não exista ou que não responda aos pings. Felizmente, o número de tentativas pode ser reduzido para 1 e o tempo limite reduzido para 1 segundo. Isso ainda não é eficiente do ponto de vista de uma ferramenta de varredura dedicada, mas acho que é bom o suficiente para nossas necessidades.
&set X 1&while &X& < 255ping 192.168.11.&X& -count 1 -timeout 1< &set X (calc &X& + 1)&end
A segunda questão é que nem todos os hosts respondem aos pings. No entanto, isso não representa um problema significativo, pois, com apenas mais uma linha, nossa macro de comando informará quais hosts enviaram uma resposta ARP. Os ARPs são usados para mapear um endereço IP para um endereço MAC Ethernet, e o VOS precisa conhecer o endereço MAC Ethernet antes de poder enviar o ping. Por isso, ele envia uma solicitação ARP ao host de destino e coloca os dados da resposta no cache ARP. Todos os hosts responderão à solicitação ARP com uma resposta ARP, mesmo que não respondam à solicitação de ping subsequente. O comando arp exibirá a entrada solicitada, caso exista.
&set X 1&while &X& < 255ping 192.168.11.&X& -count 1 -timeout 1arp 192.168.11.&X&&set X (calc &X& + 1)&endA macro de comando acima apresenta as solicitações e respostas de ping misturadas com dados ARP, o que a torna pouco legível. A macro a seguir gera uma tabela organizada dos vizinhos em um arquivo chamado arp_scan.(data).out. Ela pressupõe uma rede de classe C, ou seja, os três primeiros octetos são fixos, e verifica os hosts de 1 a 254. Sugiro que você a execute como um processo em segundo plano.
& 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 hereO tempo de expiração do cache ARP é de 10 minutos. Se houver uma entrada com tempo inferior a 10 minutos, você saberá que o módulo já estava se comunicando com aquele host antes da varredura ser realizada.
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. . .A terceira questão é a reclamação que você pode receber do administrador de rede por estar fazendo uma varredura ativa na rede. Se ele se opuser a essa atividade, você pode fazer uma varredura passiva usando o comando de monitoramento de pacotes para capturar pacotes de difusão.
packet_monitor -numeric -filter -no_transmit -ip -mac_dst ff:ff:ff:ff:ff:ff -filter -no_transmit -arpO uso dessa técnica depende de que os outros hosts da rede estejam se comunicando ativamente e enviando transmissões enquanto o `packet_monitor` estiver em execução. Se você utilizar essa técnica, será necessário deixar o `packet_monitor` em execução por um bom tempo; a duração dependerá da sua rede. Sugiro que você coloque o comando acima em uma macro de comando (packet_monitor_scan.cm) e a execute como um processo iniciado. Não se esqueça de executar o processo com privilégios.
Depois de obter um rastreamento, você precisará convertê-lo em uma tabela de endereços utilizável. A macro a seguir fará isso (ela pressupõe que o processo `packet_monitor_scan` foi iniciado e gerou um arquivo `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 o que resultará na tabela a seguir.
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. . . 