使用具有静态 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 的方法)
前两点的成功取决于新连接/启动到网络的其他主机的数量以及租赁时间。