带你读《从实践中学习Kali Linux网络扫描》之三:局域网扫描-阿里云开发者社区

开发者社区> 华章出版社> 正文

带你读《从实践中学习Kali Linux网络扫描》之三:局域网扫描

简介: 本书详细讲解了网络扫描涉及的各项理论知识和技术。书中首先从理论层面帮助读者明确扫描的目的和方式,然后从基本协议的角度讲解了通用的扫描技术,最后过渡到特定类型网络环境的专有扫描技术。在先期扫描完成后,本书继续深入讲解了如何借助响应内容识别目标,并对常见的服务给出了扫描建议。在最后的相关章节,本书详细讲解了高效的数据整理和分析方式。

点击查看第一章
点击查看第二章

第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所示。

image.png

  在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选项,可以对指定的目标列表实施扫描。使用该工具的语法格式如下:

image.png

  以上语法中的选项及参数含义如下:

  • -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工具实施路由跟踪的语法格式如下:

image.png

  【实例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等。

image.png

3.2 ARP扫描

  ARP(Address Resolution Protocol,地址解析协议)是根据IP地址获取物理地址的一个TCP/IP协议。由于主机进行通信时,将会发送一个包含目标IP地址的ARP请求广播到网络上的所有主机,并接收返回消息,以此确定目标的物理地址,所以可以使用主动和被动两种方式来实施ARP扫描。本节将介绍ARP扫描的方法。

3.2.1 主动扫描

  主动扫描就是主动发送一个ARP请求包,等待目标主机的响应。如果目标主机响应了该请求后,则说明该主机是活动的;否则,说明目标主机不在线。下面介绍使用Nmap工具的-PR选项实施ARP主动扫描的方法。
  使用Nmap工具实施ARP主动扫描的语法格式如下:

image.png

  其中,-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主动扫描的方法。语法格式如下:

image.png

  其中,-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工具扫描的语法格式如下:

image.png

  【实例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工具的语法格式如下:

image.png

  其中,-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工具实施被动扫描的语法格式如下:

image.png

  其中,-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所示的界面。

image.png

  (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相关信息,包括组织名称、国家/地区、省份、城市、街道和邮编。

image.png

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所示。

image.png

  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脚本实施被动扫描的语法格式如下:

image.png

  【实例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工具实施被动扫描的语法格式如下:

image.png

  其中,-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所示对话框。

image.png

  (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所示。

image.png

  (4)在其中选择eth0接口,并单击按钮,将开始捕获数据包,如图3.6所示。或者,直接双击选择的网络接口,也可以开始捕获数据包。
  (5)从图3.6中可以看到监听到的所有数据包。从Protocol(协议)列中可以看到每个数据包的协议。例如,监听到的协议数据包有ICMPv6、BROWSER、SSDP、NBNS、LLMNR、ARP、DHCP。此时,通过分析源(Source)和目标地址(Destination),即可知道这些包是由哪个主机发送的,进而确定该主机的状态。为了能够快速找到广播的数据包,可以使用显示过滤器进行过滤。显示过滤器的语法格式如下:

image.png

  在本例中广播地址为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的主机是活动的。

image.png

image.png

  2.使用Tcpdump工具
  Tcpdump是一个命令行的嗅探工具,可以基于过滤表达式抓取网络中的报文,分析报文,并且在包层面输出报文内容以便于包层面的分析。其中,使用Tcpdump工具监听数据包的语法格式如下:

image.png

  以上语法中的选项及含义如下:

  • -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工具,以图形界面分析捕获到的包。

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

分享:

华章出版社

官方博客
官网链接