Zum Hauptinhalt springen
Als Systemadministrator eines VOS-Systems ist es Ihnen normalerweise egal, welche anderen Hosts sich im lokalen Subnetz befinden. Sie interessieren sich für die konfigurierten Gateways und natürlich für alle lokalen Hosts, die mit Ihrem System kommunizieren, aber die anderen Hosts sind für Sie nicht sichtbar. Es gibt jedoch 2 sehr gute Gründe dafür, dass Sie wissen, wer Ihre Netzwerknachbarn sind. Erstens können Sie im Falle eines Kommunikationsproblems diese anderen Hosts verwenden, um Ihre Netzwerkverbindung zu testen. Zweitens sind dies die Hosts, die am ehesten als Quelle für netzwerkbasierte Angriffe in Frage kommen.
Es ist keine schlechte Idee, das lokale Subnetz von Zeit zu Zeit zu scannen (z.B. jeden Mittwochmorgen), um zu sehen, wer da draußen ist. VOS hat keinen eingebauten Scanner - aber es hat den Ping-Befehl, der, wenn er von ein paar Zeilen eines Befehlsmakros umgeben ist, zu einem Scanner gemacht werden kann.

&set X 1

&while &X& < 255
ping 192.168.11.&X&
&set X (calc &X& + 1)
&end
Es gibt 3 Probleme bei der Verwendung von ping für die Suche nach Hosts. Erstens ist es nicht sehr effizient. Die Standardzeitüberschreitung beträgt 15 Sekunden, und der Befehl versucht es viermal, so dass es eine Minute dauert, nach einem Rechner zu suchen, der nicht vorhanden ist oder nicht auf Pings reagiert. Glücklicherweise kann die Anzahl der Versuche auf 1 und das Timeout auf 1 Sekunde reduziert werden. Das ist zwar immer noch nicht effizient im Vergleich zu einem dedizierten Scan-Tool, aber ich denke, es reicht für unsere Bedürfnisse aus.
&set X 1
&while &X& < 255
ping 192.168.11.&X& -count 1 -timeout 1
< &set X (calc &X& + 1)
&end
Das zweite Problem besteht darin, dass nicht alle Hosts auf Pings antworten werden. Dies ist jedoch kein großes Problem, da unser Befehlsmakro mit nur einer weiteren Zeile meldet, welche Hosts eine ARP-Antwort gesendet haben. ARPs werden verwendet, um eine IP-Adresse auf eine Ethernet-MAC-Adresse abzubilden, und VOS muss die Ethernet-MAC-Adresse kennen, bevor es den Ping senden kann. Daher sendet es eine ARP-Anfrage an den Zielhost und legt die Daten der Antwort im ARP-Cache ab. Alle Hosts antworten auf die ARP-Anfrage mit einer ARP-Antwort, auch wenn sie auf die anschließende Ping-Anfrage nicht antworten. Der Befehl arp zeigt den angeforderten Eintrag an, wenn er vorhanden ist.
&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
Das obige Befehlsmakro hat die Ping-Anfragen und -Antworten mit ARP-Daten vermischt, es ist nicht sehr lesbar. Das folgende Makro erzeugt eine hübsche Tabelle der Nachbarn in einer Datei namens arp_scan.(date).out. Es geht von einem Klasse-C-Netz aus, d.h. die ersten 3 Oktette sind fest und es wird nach den Hosts 1 bis 254 gesucht. Ich schlage vor, dass Sie es als gestarteten Prozess ausführen.
& arp_scan.cm begins here
&
& arp_scan.cm
& version 1.0 09-04-06
& noah.davids@stratus.com
&
&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
Der ARP-Cache-Timeout beträgt 10 Minuten. Wenn es einen Eintrag mit einer Zeit von weniger als 10 Minuten gibt, wissen Sie, dass das Modul bereits mit diesem Host kommuniziert hat, bevor der Scan durchgeführt wurde.

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
. . .
Das dritte Problem ist die Beschwerde, die Sie von Ihrem Netzwerkadministrator erhalten könnten, wenn Sie das Netzwerk aktiv scannen. Wenn er mit dieser Aktivität nicht einverstanden ist, können Sie das Netzwerk passiv scannen, indem Sie den Befehl packet monitor verwenden, um Broadcast-Pakete zu erfassen.
packet_monitor -numeric -filter -no_transmit -ip -mac_dst ff:ff:ff:ff:ff:ff -filter -no_transmit -arp
Diese Technik setzt voraus, dass die anderen Hosts im Netzwerk aktiv kommunizieren und Broadcasts senden, während packet_monitor läuft. Wenn Sie diese Technik verwenden, müssen Sie packet_monitor eine ganze Weile laufen lassen, wie lange, hängt von Ihrem Netzwerk ab. Ich schlage vor, dass Sie den obigen Befehl in ein Befehlsmakro (packet_monitor_scan.cm) einfügen und es als gestarteten Prozess ausführen. Vergessen Sie nicht, den Prozess als privilegiert zu starten.
Sobald Sie einen Trace haben, müssen Sie ihn in eine brauchbare Adresstabelle umwandeln. Das folgende Makro erledigt das (es geht davon aus, dass packet_monitor_scan ein gestarteter Prozess war, der eine process_packet_monitor_scan.out-Datei erzeugt).
& 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
& noah.davids@stratus.com
&
& 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
was die folgende Tabelle ergibt.
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
. . .

© 2020 Stratus Technologies.