Como administrador de un sistema VOS, normalmente no te importa en absoluto qué otros hosts hay en la subred local. Te interesan las puertas de enlace que están configuradas y, por supuesto, cualquier host local que se comunique con tu sistema, pero los demás hosts pasan desapercibidos para ti. Sin embargo, hay dos razones muy buenas para saber quiénes son tus vecinos de red. En primer lugar, en caso de un problema de comunicación, puedes utilizar estos otros hosts para comprobar tu conexión de red. En segundo lugar, estos son los hosts que tienen más probabilidades de ser el origen de cualquier tipo de ataque basado en la red.
No es mala idea escanear la subred local de vez en cuando (por ejemplo, todos los miércoles por la mañana) solo para ver quién hay conectado. VOS no tiene un escáner integrado, pero sí cuenta con el comando ping, que, rodeado de unas pocas líneas de una macro de comando, puede convertirse en un escáner.
&set X 1
&while &X& < 255ping 192.168.11.&X&&set X (calc &X& + 1)&endEl uso de ping para escanear hosts presenta tres inconvenientes. En primer lugar, no es muy eficiente. El tiempo de espera predeterminado es de 15 segundos y el comando realiza cuatro intentos, por lo que tardará un minuto en escanear un host que no existe o que no responde a los pings. Por suerte, el número de intentos se puede reducir a 1 y el tiempo de espera a 1 segundo. Esto sigue sin ser eficiente desde el punto de vista de una herramienta de escaneo especializada, pero creo que es suficiente para nuestras necesidades.
&set X 1&while &X& < 255ping 192.168.11.&X& -count 1 -timeout 1< &set X (calc &X& + 1)&end
El segundo problema es que no todos los hosts responden a los pings. Sin embargo, eso no supone un problema grave, ya que con solo una línea más, nuestra macro de comando indicará qué hosts han enviado una respuesta ARP. Los ARP se utilizan para asignar una dirección IP a una dirección MAC de Ethernet, y VOS debe conocer la dirección MAC de Ethernet antes de poder enviar el ping. Por lo tanto, envía una solicitud ARP al host de destino y coloca los datos de la respuesta en la caché ARP. Todos los hosts responderán a la solicitud ARP con una respuesta ARP, incluso si no responden a la solicitud de ping posterior. El comando arp mostrará la entrada solicitada si existe.
&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 de comando anterior mezcla las solicitudes y respuestas de ping con datos ARP, por lo que no resulta muy legible. La siguiente macro genera una tabla clara de hosts vecinos en un archivo llamado arp_scan.(fecha).out. Se basa en una red de clase C, es decir, los tres primeros octetos son fijos, y busca los hosts del 1 al 254. Te recomiendo que la ejecutes como un proceso en 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 hereEl tiempo de espera de la caché ARP es de 10 minutos. Si hay una entrada con una antigüedad inferior a 10 minutos, sabrás que el módulo ya se estaba comunicando con ese host antes de que se realizara el escaneo.
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. . .La tercera cuestión es la posible queja que podría recibir del administrador de la red por escanear activamente la red. Si se opone a esta actividad, puede realizar un escaneo pasivo utilizando el comando «packet monitor» para capturar paquetes de difusión.
packet_monitor -numeric -filter -no_transmit -ip -mac_dst ff:ff:ff:ff:ff:ff -filter -no_transmit -arpEl uso de esta técnica depende de que los demás hosts de la red se comuniquen activamente y envíen difusiones mientras packet_monitor está en ejecución. Si utilizas esta técnica, tendrás que dejar que packet_monitor se ejecute durante bastante tiempo; la duración dependerá de tu red. Te sugiero que incluyas el comando anterior en una macro de comando (packet_monitor_scan.cm) y lo ejecutes como un proceso iniciado. No olvides ejecutar el proceso con privilegios.
Una vez que tengas un seguimiento, tendrás que convertirlo en una tabla de direcciones utilizable. La siguiente macro lo hará (se da por hecho que «packet_monitor_scan» era un proceso iniciado que generó un archivo «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 lo que dará como resultado la siguiente tabla.
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. . . 