跳转至主要内容
作为VOS系统的系统管理员,你通常可以不关心本地子网中的其他主机是什么。你关心的是已经配置好的网关,当然还有任何与你的系统进行通信的本地主机,但其他主机都在你的雷达之下。然而,有2个非常好的理由来了解你的网络邻居是谁。首先,在出现通信问题时,你可以使用这些其他主机来测试你的网络连接。第二,这些主机最有可能成为任何一种基于网络的攻击的来源。
每隔一段时间扫描本地子网(比如说每周三早上),看看谁在外面,这不是一个坏主意。VOS没有内置的扫描器--但它有ping命令,当用几行命令宏包围时,就可以把它变成扫描器。

&set X 1

&while &X& < 255
ping 192.168.11.&X&
&set X (calc &X& + 1)
&end
使用ping扫描主机有3个问题。首先,它的效率不高。默认的超时时间是15秒,命令会尝试4次,所以要扫描一个不在那里或对ping没有反应的主机需要1分钟。幸运的是,可以将尝试次数减少到1次,超时时间减少到1秒。从专用扫描工具的角度来看,这样的效率还是不高,但我认为已经可以满足我们的需求了。
&set X 1
&while &X& < 255
ping 192.168.11.&X& -count 1 -timeout 1
< &set X (calc &X& + 1)
&end
第二个问题是,并不是所有的主机都会响应ping。然而,这并不是一个重要的问题,因为只要多一行,我们的命令宏就会报告哪些主机发送了ARP回复。ARP是用来将一个IP地址映射成以太网MAC地址的,VOS必须知道以太网MAC地址才能发送ping。因此它向目标主机发送ARP请求,并将回复的数据放入ARP缓存中。所有主机都会对ARP请求作出ARP回复,即使它们不会对随后的ping请求作出响应。如果有请求的条目,arp命令将显示该条目。
&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
上面的命令宏把ping请求和响应与ARP数据混在一起,可读性不高。下面的宏可以在一个名为arp_scan.(date).out的文件中生成一个漂亮的邻居表。它假设是一个C类网络,即前3个八位数是固定的,并扫描主机1到254。我建议你把它作为一个启动的进程来运行。
& 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
ARP缓存的超时时间是10分钟,如果有一个条目的时间小于10分钟,就会知道该模块在扫描之前已经和该主机进行了通信。

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
. . .
第三个问题是你可能会因为主动扫描网络而遭到网络管理员的抱怨。如果他们反对这种活动,你可以通过使用数据包监视器命令来捕获广播数据包,从而被动地扫描它。
packet_monitor -numeric -filter -no_transmit -ip -mac_dst ff:ff:ff:ff:ff:ff -filter -no_transmit -arp
使用这种技术依赖于网络中的其他主机在packet_monitor运行时积极通信和发送广播。如果你使用这种技术,你将不得不让packet_monitor运行一段时间,多长时间取决于你的网络。我建议你把上面的命令放到一个命令宏(packet_monitor_scan.cm)中,并把它作为一个启动的进程来运行。不要忘记以特权身份运行这个进程。
一旦你有了一个跟踪,你就需要把它转换成一个可用的地址表。下面的宏可以做到这一点(它假设packet_monitor_scan是一个已经启动的进程,会生成一个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
& 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
这将产生以下表格。
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.