Como administrador del sistema para un sistema VOS, normalmente no te podría importar menos lo que otros anfitriones son en la subred local. Te preocupas por las puertas de enlace que están configuradas y por supuesto por cualquier host local que se comunique con tu sistema, pero los otros hosts están por debajo de tu radar. Hay, sin embargo, 2 muy buenas razones para saber quiénes son sus vecinos de red. Primero, en el caso de un problema de comunicación puedes usar estos otros hosts para probar tu conexión de red. En segundo lugar, estos son los anfitriones que son más probables de ser las fuentes de cualquier tipo de ataque basado en la red.
No es una mala idea escanear la subred local de vez en cuando (digamos cada miércoles por la mañana) sólo para ver quién está ahí fuera. VOS no tiene un escáner incorporado - pero tiene el comando ping, que cuando se rodea de unas pocas líneas de un comando macro puede convertirse en un escáner.
&set X 1
&while &X& < 255
ping 192.168.11.&X&
&set X (calc &X& + 1)
&end
Hay tres problemas con el uso de ping para buscar huéspedes. Primero, no es muy eficiente. El tiempo de espera por defecto es de 15 segundos y el comando lo intentará 4 veces, por lo que tardará un minuto en escanear un host que no esté allí o no responda a los pings. Por suerte, el número de intentos puede reducirse a 1 y el tiempo de espera a 1 segundo. Esto todavía no es eficiente desde la perspectiva de una herramienta de escaneo dedicada, pero creo que es lo suficientemente bueno para nuestras necesidades.
&set X 1
&while &X& < 255
ping 192.168.11.&X& -count 1 -timeout 1
< &set X (calc &X& + 1)
&end
La segunda cuestión es que no todos los huéspedes responderán a los pings. Eso, sin embargo, no es un problema significativo porque con sólo una línea más nuestro comando macro informará qué hosts enviaron una respuesta ARP. Los ARP se utilizan para mapear una dirección IP en 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 objetivo y coloca los datos de la respuesta en la caché ARP. Todos los hosts responderán a la solicitud ARP con una respuesta ARP aunque no respondan a la solicitud de ping posterior. El comando arp mostrará la entrada solicitada si hay alguna.
&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 de comando anterior tiene las solicitudes y respuestas de ping entremezcladas con los datos del ARP, no es muy legible. El siguiente macro produce una bonita tabla de vecinos en un archivo llamado arp_scan.(date).out. Asume una red de clase C, es decir, los primeros 3 octetos son fijos y escanean los hosts del 1 al 254. Te sugiero que lo ejecutes como un proceso iniciado.
& 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
El tiempo de espera de la caché ARP es de 10 minutos, si hay una entrada con un tiempo inferior a 10 minutos sabrás que el módulo ya se estaba comunicando con ese host antes de que se hiciera 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 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
. . .
La tercera cuestión es la queja que podría recibir del administrador de la red por escanear activamente la red. Si se oponen a esta actividad, puede escanearla pasivamente utilizando el comando de monitorización de paquetes para capturar paquetes de emisión.
packet_monitor -numeric -filter -no_transmit -ip -mac_dst ff:ff:ff:ff:ff:ff -filter -no_transmit -arp
El uso de esta técnica depende de que los otros anfitriones de la red se comuniquen activamente y envíen transmisiones mientras packet_monitor está funcionando. Si usa esta técnica tendrá que dejar que packet_monitor se ejecute durante bastante tiempo, el tiempo dependerá de su red. Le sugiero que ponga el comando anterior en una macro de comando (packet_monitor_scan.cm) y lo ejecute como un proceso iniciado. No olvide ejecutar el proceso como privilegiado.
Una vez que tenga un rastro, tendrá que convertirlo en una tabla de direcciones utilizable. La siguiente macro hará eso (asume que packet_monitor_scan fue un proceso iniciado generando 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
que producirá 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-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
. . .