使用 bash 检查网络中是否存在 DHCP 服务器

使用 bash 检查网络中是否存在 DHCP 服务器

使用具有静态 IP 的 CentOS,有没有办法确定使用 bash 在网络上运行的 DHCP 服务器?

答案1

nmap很容易做到:

sudo nmap --script broadcast-dhcp-discover -e eth0

将会呈现:

Starting Nmap 6.40 ( http://nmap.org ) at 2016-08-16 09:25 UTC
Pre-scan script results:
| broadcast-dhcp-discover: 
|   IP Offered: 192.168.0.67
|   DHCP Message Type: DHCPOFFER
|   Server Identifier: 192.168.0.1
|   IP Address Lease Time: 0 days, 0:05:00
|   Subnet Mask: 255.255.255.0
|   Router: 192.168.0.1
|   Domain Name Server: 8.8.8.8
|   Domain Name: maas
|   Broadcast Address: 192.168.0.255
|_  NTP Servers: 91.189.91.157, 91.189.89.199, 91.189.94.4, 91.189.89.198
WARNING: No targets were specified, so 0 hosts scanned.
Nmap done: 0 IP addresses (0 hosts up) scanned in 0.27 seconds

注意:dhcpv6 有类似的脚本

sudo nmap --script broadcast-dhcp6-discover -e eth0

答案2

如果存储库中有 dhcpdump

来自手册页:

SYNOPSIS
       dhcpdump [-h regular-expression] -i interface

DESCRIPTION
       This command parses the output of tcpdump to display the dhcp-packets for easier checking and debugging.

USAGE
       dhcpdump -i /dev/fxp0

       If you want to filter a specific Client Hardware Address (CHADDR), then you can specifiy it as a regular expressions:

       dhcpdump -i /dev/fxp0 -h ^00:c0:4f

       This will display only the packets with Client Hardware Addresses which start with 00:c0:4f.

答案3

如果您有tcpdump时间,以 root 身份使用以下参数调用该程序可能会帮助您找到服务器:

tcpdump -i [接口 ID] -nev udp 端口​​ 68

不幸的是,由于我的网络布局,我无法立即捕获完整的 DHCP 握手。不过,我确实看到了来自 iPad 的 DHCP 请求:

22:16:44.767371 30:10:e4:8f:02:14 > ff:ff:ff:ff:ff:ff, ethertype IPv4 (0x0800), length 342: (tos 0x0, ttl 255, id 15652, offset 0, flags [none], proto UDP (17), length 328)
    0.0.0.0.68 > 255.255.255.255.67: BOOTP/DHCP, Request from 30:10:e4:8f:02:14, length 300, xid 0x42448eb6, Flags [none]
      Client-Ethernet-Address 30:10:e4:8f:02:14
      Vendor-rfc1048 Extensions
        Magic Cookie 0x63825363
        DHCP-Message Option 53, length 1: Request
        Parameter-Request Option 55, length 6: 
          Subnet-Mask, Default-Gateway, Domain-Name-Server, Domain-Name
          Option 119, Option 252
        MSZ Option 57, length 2: 1500
        Client-ID Option 61, length 7: ether 30:10:e4:8f:02:14
        Requested-IP Option 50, length 4: 192.168.2.222
        Lease-Time Option 51, length 4: 7776000
        Hostname Option 12, length 15: "NevinWiamssiPad"

在让“tcpdump”运行一整夜后,我最终看到了这个ACK:

07:46:40.049423 a8:39:44:96:fa:b8 > 68:a8:6d:58:5b:f3, ethertype IPv4 (0x0800), length 320: (tos 0x0, ttl 64, id 0, offset 0, flags [none], proto UDP (17), length 306)
    192.168.2.1.67 > 192.168.2.22.68: BOOTP/DHCP, Reply, length 278, xid 0x5e7944f, Flags [none]
      Client-IP 192.168.2.22
      Your-IP 192.168.2.22
      Client-Ethernet-Address 68:a8:6d:58:5b:f3
      Vendor-rfc1048 Extensions
        Magic Cookie 0x63825363
        DHCP-Message Option 53, length 1: ACK
        Server-ID Option 54, length 4: 192.168.2.1
        Lease-Time Option 51, length 4: 86400
        Subnet-Mask Option 1, length 4: 255.255.255.0
        Default-Gateway Option 3, length 4: 192.168.2.1
        Domain-Name-Server Option 6, length 8: 192.168.2.1,142.166.166.166

如果运行该tcpdump命令时,您看到 BOOTP/DHCP Offer 或 Ack(Nack),则该消息来自 DHCP 服务器,并且该服务器的 MAC 地址将位于第一行的时间戳之后。

因此,此处的(有效) DHCP 服务器具有 MAC 地址 a8:39:44:96:fa:b8`。

使用网络上的众多 MAC 地址查找工具之一我看到这个 MAC 属于A8:39:44 Actiontec Electronics, Inc我的路由器。

为了及时捕获恶意 DHCP 服务器数据包,我必须tcpdump在终端窗口中运行此过程:

tcpdump -i en0 -nev udp src port 67 and not ether host a8:39:44:96:fa:b8

只要该进程在其自己的窗口中运行,这将仅显示来自除我的有效 DHCP 服务器之外的主机的 DHCP 服务器响应。

以下命令将在后台运行,直到捕获 100 个数据包,并将任何恶意 DHCP 服务器消息附加到文件/tmp/rogue。同样,必须在适当的位置使用有效 DHCP 服务器的 MAC 地址,以及系统上的接口描述符。

tcpdump -U -i en0 -c 100 -nev udp src port 67 and not ether host a8:39:44:96:fa:b8 >> /tmp/rogue 2>&1 &

`

答案4

如果有足够的时间,也许可以被动地进行检测:回想一下,初始化客户端会发出 DHCPDISCOVER 广播。如果 dhcpserver 可用,它将获得一个提议,然后发出(再次作为广播!)DHCPREQUEST。因此

  • 如果你收到 DHCPREQUEST 广播,则有一个 dhcp 服务器
  • 如果您收到 DHCPDISCOVER,但在一两秒内没有收到 DHCPREQUEST(考虑到通过 dhcp 中继的远程 dhcp 服务器),则没有 dhcp 服务器
  • 如果您甚至没有收到 DHCPDISCOVER,您必须等待更长时间 - 或者尝试主动查找 dhcp 服务器(例如按照 Kenned 的方法)

前两点的成功取决于新连接/启动到网络的其他主机的数量以及租赁时间。

相关内容