第3章 局域网扫描
局域网(Local Area Network,LAN)是指某一区域内由多台计算机互联成的计算机组。在局域网中,所有的主机之间都可以进行通信。所以,通过对局域网中的主机进行扫描,即可发现活动的主机,并进行数据传输。本章将介绍对局域网中的主机进行扫描的方法。
3.1 网 络 环 境
在实施局域网扫描之前,需要对其网络环境有所了解,如网络范围、经过的路由等,然后才可以确定扫描的目标。本节将对局域网网络环境进行简单介绍。
3.1.1 网络范围
当用户实施局域网扫描时,首先要确定一个网络范围,如单个IP地址、多个IP地址、一个地址范围或整个子网,否则将会浪费大量的时间。IP地址是由两部分组成,即网络地址和主机地址。网络地址表示其属于互联网的哪一个网络,主机地址表示其属于该网络中的哪一台主机。二者是主从关系。IP地址根据网络号和主机号,分为A类(1.0.0.0~126.0.0.0)、B类(128.1.0.0~191.255.0.0)和C类(192.0.1.0~223.255.255.0)三类及特殊地址D类和E类。另外,全0和全1都保留不用。下面简单对每类地址作一个分析。
- A类:该类地址范围为1.0.0.0~126.0.0.0,子网掩码为255.0.0.0。在该地址中,第一个字节为网络号,后三个字节为主机号。该类IP地址的最前面为0,所以地址的网络号取值于1~126之间。
- B类:该类地址范围为128.1.0.0~191.255.0.0,子网掩码为255.255.0.0。在该地址中,前两个字节为网络号,后两个字节为主机号。该类IP地址的最前面为10,所以地址的网络号取值于128~191之间。
- C类:该类地址范围为192.0.1.0~223.255.255.0,子网掩码为255.255.255.0。在该地址中,前3个字节为网络号,最后一个字节为主机号。该类IP地址的最前面为110,所以地址的网络号取值于129~223之间。
- D类:是多播地址。该类IP地址的最前面为1110,所以地址的网络号取值于224~239之间。一般用于多路广播用户。多播地址是让源设备能够将分组发送给一组设备的地址。属于多播组的设备将被分配一个多播组IP地址,多播地址范围为224.0.0.0~239.255.255.255。由于多播地址表示一组设备,因此只能用作分组的目标地址。源地址总是为单播地址。多播MAC地址以十六进制值01-00-5E开头,余下的6个十六进制位是根据IP多播组地址的最后23位转换得到的。
- E类:是保留地址。该类IP地址的最前面为1111,所以地址的网络号取值于240~255之间。
在扫描时还可以通过CIDR格式来指定扫描整个子网。其中,CIDR格式是由网络地址和子网掩码两部分组成,中间使用斜杠(/)分隔。下面将给出一个CIDR和子网掩码对应列表,如表3.1所示。
在IP地址中,还有一种特殊的IP地址是广播地址。广播地址是专门用于同时向网络中所有工作站进行发送的一个地址。在使用TCP/IP协议的网络中,主机标识段host ID为全1的IP地址为广播地址,广播的分组传送给host ID段所涉及的所有计算机。例如,10.0.0.0(255.0.0.0)网段,其广播地址为10.255.255.255;172.16.0.0(255.255.0.0)网段,其广播地址为172.16.255.255;192.168.1.0(255.255.255.0)网段,其广播地址为192.168. 1.255。其中,广播地址对应的MAC地址为FF-FF-FF-FF-FF-FF。
1.使用Netmask工具
在Kali Linux中,默认提供了一个名为Netmask工具,可以用来实现IP地址格式转换。该工具可以在IP范围、子网掩码、CIDR、Cisco等格式中互相转换,并且提供了IP地址的点分十进制、十六进制、八进制、二进制之间的互相转换。
【实例3-1】使用Netmask工具将IP范围转换为CIDR格式。执行命令如下:
root@daxueba:~# netmask -c 192.168.0.0:192.168.2.255
192.168.0.0/23
192.168.2.0/24
从以上输出的信息中可以看到,已经成功地将IP范围转换为CIDR格式了。
【实例3-2】使用Netmask工具将IP范围转换为标准的子网掩码格式。执行命令如下:
root@daxueba:~# netmask -s 192.168.0.0:192.168.2.255
192.168.0.0/255.255.254.0
192.168.2.0/255.255.255.0
从以上输出的信息中可以看到,已经成功地将IP范围转换为子网掩码格式了。
【实例3-3】使用Netmask工具将IP范围转换到Cisco格式。执行命令如下:
root@daxueba:~# netmask -i 192.168.0.0:192.168.2.255
192.168.0.0 0.0.1.255
192.168.2.0 0.0.0.255
从以上输出的信息中可以看到,已经成功地将IP范围转换为Cisco格式了。
【实例3-4】使用Netmask工具将CIDR格式转换到IP范围格式。执行命令如下:
root@daxueba:~# netmask -r 192.168.0.0/23
192.168.0.0-192.168.1.255 (512)
从以上输出的信息中可以看到,已经成功地将CIDR格式转换为IP范围格式了。
2.使用Nmap工具实施扫描
Nmap工具提供了一个-iL选项,可以对指定的目标列表实施扫描。使用该工具的语法格式如下:
以上语法中的选项及参数含义如下:
- -iL:从文件列表中读取目标地址。该列表支持任何格式的地址,包括IP地址、主机名、CIDR、IPv6或者八位字节范围,而且每一项必须以一个或多个空格、制表符或换行符分开。
- inputfilename:地址列表文件名。
【实例3-5】使用Nmap工具对192.168.33.0/24整个子网中的主机进行扫描。这里将该目标写入hosts.list文件,具体如下:
root@daxueba:~# vi hosts.list
192.168.33.0/24
此时,将使用-iL选项,指定对该目标列表文件实施扫描。执行命令如下:
root@daxueba:~# nmap -iL hosts.list
Starting Nmap 7.70 ( https://nmap.org ) at 2018-12-21 11:28 CST
Nmap scan report for 192.168.33.152 (192.168.33.152)
Host is up (0.00096s latency).
Not shown: 997 closed ports
PORT STATE SERVICE
21/tcp open ftp
22/tcp open ssh
80/tcp open http
MAC Address: 00:0C:29:FD:58:4B (VMware)
Nmap scan report for 192.168.33.1 (192.168.33.1)
Host is up (0.00022s latency).
All 1000 scanned ports on 192.168.33.1 (192.168.33.1) are filtered
MAC Address: 00:50:56:C0:00:08 (VMware)
Nmap scan report for 192.168.33.2 (192.168.33.2)
Host is up (0.00044s latency).
All 1000 scanned ports on 192.168.33.2 (192.168.33.2) are closed
MAC Address: 00:50:56:FE:0A:32 (VMware)
Nmap done: 3 IP addresses (3 hosts up) scanned in 4.12 seconds
从以上显示的结果中可以看到,192.168.33.0/24网络内有3台活动主机。其中,活动的主机地址分别是192.168.33.152、192.168.33.1和192.168.33.2。
3.1.2 上级网络
在一个局域网内,用户也可能会使用多个路由器进行串联,以满足扩大原有的网络范围,或者在原有的网络下构建新的网络(子网络)。如果用户连接的是最底层网络的话,则可以通过路由跟踪的方式扫描到上级网络的路由。根据获取的路由信息,可以猜测上级网络的范围大小。下面将介绍实施路由跟踪的方法。
1.使用Nmap工具
Nmap工具提供了一个--traceroute选项,可以用来实现路由跟踪。下面介绍使用Nmap工具实施路由跟踪,以获取上级网络信息。
【实例3-6】使用Nmap工具找出访问百度服务器(www.baidu.com)所经过的网络节点。执行命令如下:
root@daxueba:~# nmap --traceroute www.baidu.com
Starting Nmap 7.70 ( https://nmap.org ) at 2019-01-04 15:28 CST
Nmap scan report for www.baidu.com (61.135.169.125)
Host is up (0.019s latency).
Other addresses for www.baidu.com (not scanned): 61.135.169.121
Not shown: 998 filtered ports
PORT STATE SERVICE
80/tcp open http
443/tcp open https
TRACEROUTE (using port 443/tcp)
HOP RTT ADDRESS
1 1.22 ms 192.168.1.1 (192.168.1.1)
2 3.56 ms 10.188.0.1 (10.188.0.1)
3 ... 10
11 18.21 ms 61.135.169.125
Nmap done: 1 IP address (1 host up) scanned in 9.22 seconds
从输出的信息中可以看到,Nmap工具自动将百度服务器的IP地址解析出来并进行了扫描。从显示的结果中可以看到,本地到百度服务器经过的上级路由依次为192.168.1.1和192.168.0.1。而且,还可以看到目标服务器上开放了80和443两个端口。
2.使用Traceroute工具
Traceroute是一款用来侦测由源主机到目标主机所经过的路由请求的重要工具。Traceroute工具收到目的主机IP后,首先给目的主机发送一个TTL=1(TTL指生存时间)的UDP数据包,而经过的第一个路由器收到这个数据包之后,自动把TTL减去1。当TTL变为0之后,路由器就将这个数据包抛弃了,并同时产生一个主机不可达的ICMP超时数据报给主机。主机收到这个ICMP数据报以后,会发送一个TTL=2的数据报给目的主机,然后刺激第二个路由器给主机发送ICMP数据报,如此反复,直到到达目的主机。这样Traceroute就可以拿到所有路由器的IP,从而避开IP头只能记录有限路由的IP地址。下面介绍使用Traceroute工具实施路由跟踪的方法。
使用Traceroute工具实施路由跟踪的语法格式如下:
【实例3-7】使用Traceroute工具侦测访问百度服务器的所有路由。执行命令如下:
root@daxueba:~# traceroute www.baidu.com
traceroute to www.baidu.com (61.135.169.125), 30 hops max, 60 byte packets
1 192.168.1.1 (192.168.1.1) 0.622 ms 0.520 ms 0.616 ms
2 10.188.0.1 (10.188.0.1) 3.504 ms 3.463 ms 3.528 ms
3 193.6.220.60.adsl-pool.sx.cn (60.220.6.193) 12.510 ms 12.441 ms 12.364
ms
4 253.8.220.60.adsl-pool.sx.cn(60.220.8.253) 14.471 ms 169.9.220.60.
adsl-
pool.sx.cn (60.220.9.169) 12.489 ms 249.8.220.60.adsl-pool.sx.cn (60. 220. 8.249) 12.112 ms
5 - 219.158.96.89 (219.158.96.89) 24.322 ms 219.158.103.81 (219.158.103.
81) 21.709 ms
6 124.65.194.18 (124.65.194.18) 23.039 ms 124.65.194.166 (124.65.194. 166) 23.014 ms 124.65.194.154 (124.65.194.154) 26.398 ms
7 123.126.0.54 (123.126.0.54) 20.222 ms 19.757 ms 61.51.113.194 (61.51.
113.194) 32.827 ms
8 61.49.168.78 (61.49.168.78) 27.969 ms 123.125.248.110 (123.125.248. 110)
21.597 ms 61.49.168.102 (61.49.168.102) 21.717 ms
9 - - *
10 - - *
11 - - *
12 - - *
13 - - *
14 - - *
15 - - *
16 - - *
17 - - *
18 - - *
19 - - *
20 - - *
21 - - *
22 - - *
23 - - *
24 - - *
25 - - *
26 - - *
27 - - *
28 - - *
29 - - *
30 - - *
在以上输出信息中,每条记录序列号从1开始。其中,每个记录就是一跳,每跳表示一个网关。而且我们还可以看到每行有3个时间,单位是ms。这3个时间表示探测数据包向每个网关发送3个数据包后,网关响应后返回的时间。另外,我们还发现有一些行是以星号表示的。出现这种情况,可能是防火墙封掉了ICMP的返回消息,所以我们无法获取到相关的数据包返回数据。从输出的第一行信息可以看到,已经成功解析出百度服务器的IP地址为61.135.169.125,共经过30跳,包大小为60个字节。从显示的记录中可以看到,经过的路由有192.168.1.1、10.188.0.1、60.220.6.193等。
3.2 ARP扫描
ARP(Address Resolution Protocol,地址解析协议)是根据IP地址获取物理地址的一个TCP/IP协议。由于主机进行通信时,将会发送一个包含目标IP地址的ARP请求广播到网络上的所有主机,并接收返回消息,以此确定目标的物理地址,所以可以使用主动和被动两种方式来实施ARP扫描。本节将介绍ARP扫描的方法。
3.2.1 主动扫描
主动扫描就是主动发送一个ARP请求包,等待目标主机的响应。如果目标主机响应了该请求后,则说明该主机是活动的;否则,说明目标主机不在线。下面介绍使用Nmap工具的-PR选项实施ARP主动扫描的方法。
使用Nmap工具实施ARP主动扫描的语法格式如下:
其中,-PR表示实施ARP Ping扫描。
【实例3-8】使用Nmap实施ARP主动扫描。执行命令如下:
root@daxueba:~# nmap -PR 192.168.33.152
Starting Nmap 7.70 ( https://nmap.org ) at 2018-12-21 11:49 CST
Nmap scan report for 192.168.33.152 (192.168.33.152)
Host is up (0.000073s latency).
Not shown: 997 closed ports
PORT STATE SERVICE
21/tcp open ftp
22/tcp open ssh
80/tcp open http
MAC Address: 00:0C:29:FD:58:4B (VMware)
Nmap done: 1 IP address (1 host up) scanned in 0.21 seconds
从以上输出信息中可以看到,目标主机192.168.33.152是活动的。而且,开放的端口有3个,分别是21、22和80。
1.使用Netdiscover工具
Netdiscover是一个主动/被动的ARP侦查工具。使用该工具可以在网络上扫描IP地址,检查在线主机或搜索为它们发送的ARP请求。下面介绍使用Netdiscover工具实施ARP主动扫描的方法。语法格式如下:
其中,-r [range]表示指定扫描的网络范围。
【实例3-9】使用Netdiscover工具实施ARP主动扫描。执行命令如下:
root@daxueba:~# netdiscover -r 192.168.1.0/24
Currently scanning: Finished! | Screen View: Unique Hosts
6 Captured ARP Req/Rep packets, from 3 hosts. Total size: 360
________________________________________________________________
IP At MAC Address Count Len MAC Vendor / Hostname
----------------------------------------------------------------
192.168.1.1 70:85:40:53:e0:35 20 1200 Unknown vendor
192.168.1.3 1c:6f:65:c8:4c:89 14 840 GIGA-BYTE TECHNOLOGY
CO.,LTD.
192.168.1.41 1c:77:f6:60:f2:cc 5 300 GUANGDONG OPPO MOBILE
TELECOMMUNICATIONS CORP.,LTD
从以上输出信息中可以看到,扫描到了3台活动主机,地址分别是192.168.1.1、192.168.1.3和192.168.1.41。
2.使用arp-scan工具
arp-scan是一款ARP扫描工具。该工具可以进行单一目标扫描,也可以进行批量扫描。批量扫描的时候,用户可以通过CIDR、地址范围或者列表文件的方式指定。该工具允许用户定制ARP包,构建非标准数据包。同时,该工具会自动解析MAC地址,给出MAC地址对应的硬件厂商,以帮助用户确认目标。其中,使用arp-scan工具扫描的语法格式如下:
【实例3-10】使用arp-scan工具对目标主机192.168.1.3实施扫描。执行命令如下:
root@daxueba:~# arp-scan 192.168.1.3
Interface: eth0, datalink type: EN10MB (Ethernet)
Starting arp-scan 1.9.5 with 1 hosts (https://github.com/royhills/arp-scan)
192.168.1.3 1c:6f:65:c8:4c:89 GIGA-BYTE TECHNOLOGY CO.,LTD.
1 packets received by filter, 0 packets dropped by kernel
Ending arp-scan 1.9.5: 1 hosts scanned in 0.590 seconds (1.69 hosts/sec).
1 responded
从以上的输出信息中可以看到,目标主机是活动的。此外,还可以看到该目标主机的MAC地址为1c:6f:65:c8:4c:89,网卡生产厂商为GIGA-BYTE TECHNOLOGY CO.,LTD。
3.使用Arping工具
Arping是一个ARP级别的Ping工具,主要用来向局域网内的其他主机发送ARP请求的指令。使用该工具可以测试局域网内的某个IP地址是否已被使用。Arping工具的语法格式如下:
其中,-c 表示指定发送的ARP包数。
【实例3-11】使用Arping工具实施ARP扫描,并发送一个ARP请求包。执行命令如下:
root@daxueba:~# arping -c 1 192.168.33.147
ARPING 192.168.33.147
60 bytes from 00:0c:29:3e:84:91 (192.168.33.147): index=0 time=238.821 usec
--- 192.168.33.147 statistics ---
1 packets transmitted, 1 packets received, 0% unanswered (0 extra)
rtt min/avg/max/std-dev = 0.239/0.239/0.239/0.000 ms
从以上输出信息中可以看到,收到了目标主机返回的一个响应包,由此可以说明目标主机是活动的。如果目标主机不在线,将显示如下信息:
root@daxueba:~# arping -c 1 192.168.33.128
ARPING 192.168.33.128
Timeout
--- 192.168.33.128 statistics ---
1 packets transmitted, 0 packets received, 100% unanswered (0 extra)
从输出的信息中可以看到,返回的消息为Timeout(超时)。
3.2.2 被动扫描
被动扫描是通过长期监听ARP广播,来发现同一局域网中的活动主机。Netdiscover工具既可以以主动模式扫描主机,也可以以被动模式嗅探存活的主机。下面介绍使用Netdiscover工具实施被动扫描的方法。
Netdiscover工具实施被动扫描的语法格式如下:
其中,-p:被动模式(passive mode),不发送任何数据包,仅嗅探。
【实例3-12】使用Netdiscover工具实施被动扫描。执行命令如下:
root@daxueba:~# netdiscover -p
执行以上命令后,将显示如下信息:
Currently scanning: (passive) | Screen View: Unique Hosts
39 Captured ARP Req/Rep packets, from 3 hosts. Total size: 2340
_________________________________________________________________
IP At MAC Address Coun Len MAC Vendor / Hostname
-----------------------------------------------------------------
192.168.1.1 70:85:40:53:e0:35 20 1200 Unknown vendor
192.168.1.3 1c:6f:65:c8:4c:89 14 840 GIGA-BYTE TECHNOLOGY
CO.,LTD.
192.168.1.41 1c:77:f6:60:f2:cc 5 300 GUANGDONG OPPO MOBILE
TELECOMMUNICATIONS CORP.,LTD
从输出的第1行信息中,可以看到正在使用被动模式(passive)实施扫描。从第2行信息中,可以看到嗅探到的包数、主机数及包大小。第3行以下的信息则是嗅探到的包信息。在该部分中共包括6列,分别是IP(IP地址)、At MAC Address(MAC地址)、Count(包数)、Len(长度)、MAC Vendor(MAC地址生产厂商)和Hostname(主机名)。通过分析捕获到的包,可以知道当前局域网中活动的主机IP地址、MAC地址及MAC地址的生产厂商等。例如,主机192.168.13的MAC地址为1c:6f:65:c8:4c:89,MAC地址厂商为GIGA-BYTE,主机名为TECHNOLOGY CO.,LTD.。如果用户不想要继续扫描的话,可以按快捷键Ctrl+C停止被动扫描。
3.2.3 设备MAC查询
通过对目标主机实施ARP扫描后,可以获取到目标主机的MAC地址,以及MAC生产厂商。但有一些设备无法获取到其生产厂商,此时可以到https://mac.51240.com/ 网站进行查询,以获取更详细的信息。
【实例3-13】查询设备MAC地址的详细信息。具体操作步骤如下:
(1)在浏览器中输入MAC地址查询网址https://mac.51240.com/。访问成功后,将显示如图3.1所示的界面。
(2)在图3.1所示的“MAC地址”文本框中输入要查询的MAC地址,并单击“查询”按钮即可获取到对应信息。其中,输入的MAC地址格式为00-01-6C-A6-29或00:01:6C:06:A6:29。例如,这里查询MAC地址为70:85:40:53:e0:35的信息,查询结果如图3.2所示。
(3)从图3.2中可以看到获取到的MAC相关信息,包括组织名称、国家/地区、省份、城市、街道和邮编。
3.3 DHCP被动扫描
DHCP(Dynamic Host Configuration Protocol,动态主机配置协议)是一个局域网的网络协议,主要作用就是给内部网或网络服务供应商自动分配IP地址。当一个客户端需要获取一个IP地址时,将会向DHCP服务器发送广播包,收到请求的服务器会提供一个可用的IP地址给客户端,所以可以监听该协议的包。本节将介绍实施DHCP被动扫描的方法。
3.3.1 DHCP工作机制
DHCP协议采用UDP作为传输协议,主机发送请求消息到DHCP服务器的67号端口,DHCP服务器回应应答消息给主机的68号端口。DHCP协议的具体工作流程如图3.3所示。
DHCP工作流程的详细交互过程如下:
(1)DHCP客户端以广播的方式发出DHCP Discover报文。
(2)所有的DHCP服务器都能够接收到DHCP客户端发送的DHCP Discover报文,所有的DHCP服务器都会给出响应,向DHCP客户端发送一个DHCP Offer报文。DHCP Offer报文中Your(Client) IP Address字段就是DHCP服务器能够提供给DHCP客户端使用的IP地址,且DHCP服务器会将自己的IP地址放在Option字段中以便DHCP客户端区分不同的DHCP服务器。DHCP服务器在发出此报文后会存在一个已分配IP地址的记录。
(3)DHCP客户端只能处理其中的一个DHCP Offer报文,一般的原则是DHCP客户端处理最先收到的DHCP Offer报文。DHCP客户端会发出一个广播的DHCP Request报文,在选项字段中会加入选中的DHCP服务器的IP地址和需要的IP地址。
(4)DHCP服务器收到DHCP Request报文后,判断选项字段中的IP地址是否与自己的地址相同。如果不相同,DHCP服务器不做任何处理只清除相应IP地址分配记录。如果相同,DHCP服务器就会向DHCP客户端响应一个DHCP ACK报文,并在选项字段中增加IP地址的使用租期信息。
(5)DHCP客户端接收到DHCP ACK报文后,检查DHCP服务器分配的IP地址是否能够使用。如果可以使用,则DHCP客户端成功获得IP地址,并根据IP地址使用租期自动启动续延过程。如果DHCP客户端发现分配的IP地址已经被使用,则DHCP客户端向DHCP服务器发出DHCP Decline报文,通知DHCP服务器禁用这个IP地址。然后,DHCP客户端将开始新的地址申请过程。
(6)DHCP客户端在成功获取IP地址后,随时可以通过发送DHCP Release报文释放自己的IP地址。DHCP服务器收到DHCP Release报文后,会回收相应的IP地址并重新分配。
3.3.2 被动扫描
通过对DHCP协议的工作流程进行分析可知,当客户端请求获取IP地址时,会发送一个DHCP Discover广播包,此时,局域网中的所有主机都可以收到该数据包。所以,通过监听方式,即可实现DHCP被动扫描。下面将介绍实施DHCP被动扫描的方法。
1.使用Nmap工具
在Nmap中,提供了一个broadcast-dhcp-discover脚本能够用来发送一个DHCP Discover广播包,并显示响应包的具体信息。通过对响应包的信息进行分析,能够找到可分配的IP地址。使用broadcast-dhcp-discover脚本实施被动扫描的语法格式如下:
【实例3-14】使用broadcast-dhcp-discover脚本向局域网中发送DHCP Discover广播包。执行命令如下:
root@daxueba:~# nmap --script broadcast-dhcp-discover
Starting Nmap 7.70 ( https://nmap.org ) at 2018-12-30 18:30 CST
Pre-scan script results:
| broadcast-dhcp-discover:
| Response 1 of 1:
| IP Offered: 192.168.33.156 #提供的IP地址
| DHCP Message Type: DHCPOFFER #DHCP消息类型
| Server Identifier: 192.168.33.254 #服务器标识符
| IP Address Lease Time: 30m00s #IP地址释放时间
| Subnet Mask: 255.255.255.0 #子网掩码
| Router: 192.168.33.2 #路由地址
| Domain Name Server: 192.168.33.2 #域名服务
| Domain Name: localdomain #域名
| Broadcast Address: 192.168.33.255 #广播地址
| NetBIOS Name Server: 192.168.33.2 #NetBIOS名称服务
| Renewal Time Value: 15m00s #更新时间值
|_ Rebinding Time Value: 26m15s #第二次选择时间值
WARNING: No targets were specified, so 0 hosts scanned.
Nmap done: 0 IP addresses (0 hosts up) scanned in 1.32 seconds
从以上输出信息中可以看到,可以提供的IP地址为192.168.33.156。
2.使用dhcpdump工具
dhcpdump是一个命令行格式的DHCP流量嗅探工具,可以捕获DHCP的请求/回复流量,并以用户友好的方式显示解码的DHCP协议消息。使用dhcpdump工具实施被动扫描的语法格式如下:
其中,-i [interface]表示指定监听的网络接口。
在Kali Linux中,默认没有安装dhcpdump工具。如果要使用该工具,则必须先安装。执行命令如下:
root@daxueba:~# apt-get install dhcpdump
执行以上命令后,如果没有报错,则说明安装成功。
【实例3-15】使用dhcpdump工具实施被动扫描。执行命令如下:
root@daxueba:~# dhcpdump -i eth0
TIME: 2019-01-02 17:33:29.634 #时间
IP: 0.0.0.0 (0:c:29:fd:58:4b) > 255.255.255.255 (ff:ff:ff:ff:ff:ff) #IP地址
OP: 1 (BOOTPREQUEST) #报文类型
HTYPE: 1 (Ethernet) #客户端的网络硬件地址类型
HLEN: 6 #客户端的网络硬件地址长度
HOPS: 0 #跳数
XID: 5a162962 #事务ID
SECS: 0 #秒数
FLAGS: 0 #标志
CIADDR: 0.0.0.0 #客户端自己的IP地址
YIADDR: 0.0.0.0 #你的IP地址
SIADDR: 0.0.0.0 #服务器的IP地址
GIADDR: 0.0.0.0 #中继代理IP地址
CHADDR: 00:0c:29:fd:58:4b:00:00:00:00:00:00:00:00:00:00 #客户端硬件地址
SNAME: . #服务器的主机名
FNAME: . #启动文件名
OPTION: 53 ( 1) DHCP message type 3 (DHCPREQUEST) #选项
OPTION: 12 ( 7) Host name daxueba
OPTION: 55 ( 16) Parameter Request List 1 (Subnet mask)
28 (Broadcast address)
2 (Time offset)
3 (Routers)
15 (Domainname)
6 (DNS server)
119 (Domain Search)
12 (Host name)
44 (NetBIOS name server)
47 (NetBIOS scope)
26 (Interface MTU)
121 (Classless Static Route)
42 (NTP servers)
249 (MSFT - Classless route)
33 (Static route)
252 (MSFT - WinSock Proxy Auto Detect)
----------------------------------------------------------
TIME: 2019-01-02 17:33:29.634 #时间
IP: 192.168.33.254 (0:50:56:f7:d0:3e) > 192.168.33.152 (0:c:29:fd:58:4b) #IP地址
OP: 2 (BOOTPREPLY) #报文类型
HTYPE: 1 (Ethernet) #客户端的网络硬件地址类型
HLEN: 6 #客户端的网络硬件地址长度
HOPS: 0 #跳数
XID: 5a162962 #事务ID
SECS: 0 #秒数
FLAGS: 0 #标志
CIADDR: 0.0.0.0 #客户端自己的IP地址
YIADDR: 192.168.33.152 #你的IP地址
SIADDR: 192.168.33.254 #服务器的IP地址
GIADDR: 0.0.0.0 #中继代理IP地址
CHADDR: 00:0c:29:fd:58:4b:00:00:00:00:00:00:00:00:00:00 #客户机硬件地址
SNAME: . #服务器的主机名
FNAME: . #启动文件名
OPTION: 53 ( 1) DHCP message type 5 (DHCPACK) #选项
OPTION: 54 ( 4) Server identifier 192.168.33.254
OPTION: 51 ( 4) IP address leasetime 1800 (30m)
OPTION: 1 ( 4) Subnet mask 255.255.255.0
OPTION: 28 ( 4) Broadcast address 192.168.33.255
OPTION: 3 ( 4) Routers 192.168.33.2
OPTION: 15 ( 11) Domainname localdomain
OPTION: 6 ( 4) DNS server 192.168.33.2
OPTION: 44 ( 4) NetBIOS name server 192.168.33.2
----------------------------------------------------------
以上输出的信息,就是一个DHCP请求及响应包信息。通过对以上输出结果的分析,可知道第一个包为BOOTPREQUEST(请求),第二个包为BOOTPREPLY(响应)。
3.4 其 他 监 听
除ARP和DHCP请求外,在局域网中还有一些协议,会主动发送一些广播或组播包,如BROWSER、SSDP和LLMNR等。此时通过监听方式,可以了解到一些活动主机的信息。本节将介绍对这些协议数据包进行监听的方法。
1.使用Wireshark工具
Wireshark是一款非常流行的网络封包分析软件,功能十分强大。使用该工具可以截取各种网络封包,并显示网络封包的详细信息。下面将介绍使用Wireshark工具监听局域网中的各种广播数据包。
【实例3-16】使用Wireshark进行数据包监听。具体操作步骤如下:
(1)关闭系统中运行的程序,以免产生流量影响对数据包的分析。然后启动Wireshark工具。在图形界面依次选择“应用程序”|“嗅探/欺骗”|wireshark命令,将弹出如图3.4所示对话框。或者,在命令行输入如下命令:
root@daxueba:~# wireshark
执行以上命令后,将弹出如图3.4所示对话框。
(2)该对话框中显示的是一个警告信息,提示在init.lua文件中使用dofile函数禁用了使用超级用户运行Wireshark。这是因为Wireshark工具是使用Lua语言编写的,并且在Kali Linux中的init.lua文件中有一处语法错误,所以会提示Lua:Error during loading:。此时只需要将init.lua文件中倒数第二行代码修改一下就可以了,原文件中倒数第一、二行代码如下:
root@daxueba:~# vi /usr/share/wireshark/init.lua
dofile(DATA_DIR.."console.lua")
--dofile(DATA_DIR.."dtd_gen.lua")
将以上第1行修改如下:
--dofile(DATA_DIR.."console.lua")
--dofile(DATA_DIR.."dtd_gen.lua")
修改完该内容后,再次运行Wireshark将不会提示以上警告信息。
(3)此时,单击OK按钮,即可启动Wireshark工具,如图3.5所示。
(4)在其中选择eth0接口,并单击按钮,将开始捕获数据包,如图3.6所示。或者,直接双击选择的网络接口,也可以开始捕获数据包。
(5)从图3.6中可以看到监听到的所有数据包。从Protocol(协议)列中可以看到每个数据包的协议。例如,监听到的协议数据包有ICMPv6、BROWSER、SSDP、NBNS、LLMNR、ARP、DHCP。此时,通过分析源(Source)和目标地址(Destination),即可知道这些包是由哪个主机发送的,进而确定该主机的状态。为了能够快速找到广播的数据包,可以使用显示过滤器进行过滤。显示过滤器的语法格式如下:
在本例中广播地址为192.168.33.255,所以输入的显示过滤器为“ip.dst==192.168.33.255”。当过滤成功后,显示如图3.7所示。
(6)在图3.7中显示的数据包都是广播数据包。发送这几个广播数据包的源IP地址分别是192.168.33.147和192.168.33.1。由此可以说明,当前局域网中IP地址为192.168.33.147和192.168.33.1的主机是活动的。
2.使用Tcpdump工具
Tcpdump是一个命令行的嗅探工具,可以基于过滤表达式抓取网络中的报文,分析报文,并且在包层面输出报文内容以便于包层面的分析。其中,使用Tcpdump工具监听数据包的语法格式如下:
以上语法中的选项及含义如下:
- -i < interface >:指定监听的网络接口。
- -w < file >:指定数据包保存的文件名。
【实例3-17】使用Tcpdump工具监听局域网(192.168.33.0/24)中的广播数据包。执行命令如下:
root@daxueba:~# tcpdump -i eth0 'dst 192.168.33.255'
执行以上命令后,将显示如下信息:
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on eth0, link-type EN10MB (Ethernet), capture size 262144 bytes
16:42:08.253592 IP 192.168.33.1.netbios-ns > 192.168.33.255.netbios-ns:
NBT UDP PACKET(137): QUERY; REQUEST; BROADCAST
16:42:09.003718 IP 192.168.33.1.netbios-ns > 192.168.33.255.netbios-ns:
NBT UDP PACKET(137): QUERY; REQUEST; BROADCAST
16:42:09.753975 IP 192.168.33.1.netbios-ns > 192.168.33.255.netbios-ns:
NBT UDP PACKET(137): QUERY; REQUEST; BROADCAST
16:43:40.623859 IP 192.168.33.147.netbios-dgm > 192.168.33.255.netbios-dgm:
NBT UDP PACKET(138)
16:43:40.623967 IP 192.168.33.147.netbios-dgm > 192.168.33.255.netbios-dgm:
NBT UDP PACKET(138)
16:55:47.618389 IP 192.168.33.147.netbios-dgm > 192.168.33.255.netbios-dgm:
NBT UDP PACKET(138)
16:55:47.618562 IP 192.168.33.147.netbios-dgm > 192.168.33.255.netbios-dgm:
NBT UDP PACKET(138)
16:58:20.188490 IP 192.168.33.1.netbios-ns > 192.168.33.255.netbios-ns:
NBT UDP PACKET(137): QUERY; REQUEST; BROADCAST
16:58:20.939089 IP 192.168.33.1.netbios-ns > 192.168.33.255.netbios-ns:
NBT UDP PACKET(137): QUERY; REQUEST; BROADCAST
16:58:21.689402 IP 192.168.33.1.netbios-ns > 192.168.33.255.netbios-ns:
NBT UDP PACKET(137): QUERY; REQUEST; BROADCAST
从以上输出信息中可以看到监听到的数据包。从显示的包信息中,可以看到数据包的源和目标IP地址、使用的协议及包长度。如果想停止监听数据包的话,按Ctrl+C组合键后,将显示如下信息:
^C
10 packets captured
10 packets received by filter
0 packets dropped by kernel
从输出的信息中可以看到,捕获到了10个数据包。在以上命令中,没有指定将输出结果写入到一个文件中,所以是标准输出。如果使用-w选项指定捕获文件的话,将不会是标准输出。此外,还可以使用Wireshark工具,以图形界面分析捕获到的包。