如何探测网络上非法的 DHCP 服务器
2013-03-20 09:36
309 查看
http://qq200467.blog.51cto.com/150998/66163
ubuntu 可使用命令 : sudo dhclient -v
您是不是经常被局域网内非法的dhcp困扰?您的用户无法获得正确的ip而不能上网?看看这篇文章将会给您一定的提示:
一、首先简单介绍一下 DHCP 的工作流程
1、客户机发送 DHCPDISCOVER 广播消息 ,这个消息的 src ip 是 0.0.0.0 ,dst ip 是 255.255.255.255 。src mac 是客户机的 mac ,dst mac 是
ff:ff:ff:ff:ff:ff 。 注意!如果这个客户机之前获得某个 ip ,则它会使用 option requested-ip-address 来申明希望继续使用某个 ip ,否则为空
2、每个收到这个广播的 DHCP 服务器都会返回一个 DHCPOFFER ,src ip 是 DHCP 服务器的 ip ,dst ip 是 0.0.0.0 ,src mac 是服务器的 mac ,dst mac 是
客户机的 mac 。注意,服务器会在发送 DHCPOFFER 之前对要分配的 ip 发送一个 ping 包,如果收到响应则表示该 ip 被占用,不能分配,否则则可以被分配
3、客户机可能会收到多个 DHCPOFFER ,这时它处于 RFC 2131 中所规定的 SELECTING 状态。它可以从多个 OFFER 中挑选一个合适的。
默认是只接受第1个收到的 OFFER ,忽略其他的。这里正是我们需要修改的。
4、客户机发送一个 DHCPREQUEST 消息,src ip 是 0.0.0.0 ,dst ip 是 255.255.255.255 。src mac 是客户机的 mac , dst mac 是 ff:ff:ff:ff:ff:ff。
然后通过 option server-identifier 告诉所有 DHCP 服务器它选择的是那个 DHCP 服务器的 OFFER。
注意,在这个时间,客户机实际上已经拿到了 ip 了,可以实现点-点的通信了
5、其他没有被接受的 DHCP 服务器在收到 DHCPREQUEST 后就会知道自己的 OFFER 没有被接受,也就不再关心了
6、那个被选中的 DHCP 服务器返回一个 DHCP ACK 消息,src ip 是自己的 ip ,dst ip 是客户机的 ip 。src mac 是服务器的 mac ,dst mac 是客户机的 mac
7、这就完成了一个 lease 。
8、如果客户机是续约,且 Server 发现之前的 ip 已经过期,而且被另外一台客户机所申请,且该服务器是“权威的“则会返回一个 DHCPNAK ,客户机则放弃申请
该 ip ,并从 DHCPDISCOVER 开始,而不是从 DHCPREQUEST 开始。
二、什么是 Rogue DHCP ?
由于目前 DHCP 没有认证功能,如果有人无心启动了 DHCP 服务,但又没有配置好 /etc/dhcpd.conf ,这时就会干扰正常的 ip 租用。
举个例子,我有一个 “权威” 的 DHCP 服务器 172.17.64.34 ,提供的地址是从 172.17.64.244 ~ 248 。这时有人非法启动了一个 DHCP 服务器 ,
其 ip 为 172.17.64.39 , 分配的地址为 172.17.64.249~254 。
假设有一台客户机,它申请 ip 时 ,那台”非法“的 DHCP 服务器先返回一个 DHCPOFFER ,则客户机会拿着那个”非法的 ip“。
然后在后续的过程也会继续申请该 ip ,这就可能造成那些由”权威“的 DHCP 服务器分配的 ip 发生冲突的情况。
三、什么是“权威的”DHCP 服务器
就是允许返回 DHCPNAK 的 DHCP 服务器。默认 ISC DHCP 服务器都不会认为自己是“权威的”
只有那些“权威的” DHCP 服务器才能对一个非法的 request 返回一个 DHCPNAK。
你必须在 /etc/dhcpd.conf 中加入下面的指令
[Copy to clipboard]
[ - ]
CODE:
authoritative;
具体方法
该方法需要一台空闲的客户机。
1、设置接口
[Copy to clipboard]
[ - ]
CODE:
BOOTPROTO=dhcp
PEERDNS=no
2、设置 /etc/dhclient.conf :
[Copy to clipboard]
[ - ]
CODE:
select-timeout 5;
interface “eth1″ {
send fqdn.server-update on;
send dhcp-client-identifier “my-dhcp-client.n7css.com.”;
send fqdn.fqdn “my-dhcp-client.n7css.com.”;
send fqdn.encoded on;
send host-name “my-dhcp-client.n7css.com.”;
}
第一句是最主要的。目的让客户机不要立即选择 DHCPOFFER ,而是等待5秒。否则 dhclient 只会打印它所接受的那个 DHCPOFFER
3、以 root 身份执行命令
[Copy to clipboard]
[ - ]
CODE:
[root@my-dhcp-client root]# dhclient -1 eth1
Internet Systems Consortium DHCP Client V3.0.1
Copyright 2004 Internet Systems Consortium.
All rights reserved.
For info, please visit http://www.isc.org/products/DHCP
Listening on LPF/eth1/00:01:02:97:75:d3
Sending on LPF/eth1/00:01:02:97:75:d3
Sending on Socket/fallback
DHCPDISCOVER on eth1 to 255.255.255.255 port 67 interval 7
DHCPOFFER from 172.17.64.39
DHCPOFFER from 172.17.64.34
DHCPREQUEST on eth1 to 255.255.255.255 port 67
DHCPACK from 172.17.64.34
bound to 172.17.64.247 — renewal in 2726 seconds.
[root@my-dhcp-client root]#
可以看到上面指出 dhclient 收到两个 DHCPOFFER ,一个是来自 172.17.64.39 ,一个是来自 172.17.64.34 ,
所以你只要用
[Copy to clipboard]
[ - ]
CODE:
grep DHCPOFFER |grep -v ‘172.17.64.39′ |awk ‘{print $3}’
就可以找出有那些非法的 DHCP 服务器了
此外还有一个想法,就是利用 dhclient.conf 中的 require 来强制客户机只能从那些服务器获得 ip
只有 server 返回某个选项时(我们可以自定义一个 option space ),客户机才接受这个 offer ,否则拒绝
不知道有没有人试过?
转自chinaunix
ubuntu 可使用命令 : sudo dhclient -v
您是不是经常被局域网内非法的dhcp困扰?您的用户无法获得正确的ip而不能上网?看看这篇文章将会给您一定的提示:
一、首先简单介绍一下 DHCP 的工作流程
1、客户机发送 DHCPDISCOVER 广播消息 ,这个消息的 src ip 是 0.0.0.0 ,dst ip 是 255.255.255.255 。src mac 是客户机的 mac ,dst mac 是
ff:ff:ff:ff:ff:ff 。 注意!如果这个客户机之前获得某个 ip ,则它会使用 option requested-ip-address 来申明希望继续使用某个 ip ,否则为空
2、每个收到这个广播的 DHCP 服务器都会返回一个 DHCPOFFER ,src ip 是 DHCP 服务器的 ip ,dst ip 是 0.0.0.0 ,src mac 是服务器的 mac ,dst mac 是
客户机的 mac 。注意,服务器会在发送 DHCPOFFER 之前对要分配的 ip 发送一个 ping 包,如果收到响应则表示该 ip 被占用,不能分配,否则则可以被分配
3、客户机可能会收到多个 DHCPOFFER ,这时它处于 RFC 2131 中所规定的 SELECTING 状态。它可以从多个 OFFER 中挑选一个合适的。
默认是只接受第1个收到的 OFFER ,忽略其他的。这里正是我们需要修改的。
4、客户机发送一个 DHCPREQUEST 消息,src ip 是 0.0.0.0 ,dst ip 是 255.255.255.255 。src mac 是客户机的 mac , dst mac 是 ff:ff:ff:ff:ff:ff。
然后通过 option server-identifier 告诉所有 DHCP 服务器它选择的是那个 DHCP 服务器的 OFFER。
注意,在这个时间,客户机实际上已经拿到了 ip 了,可以实现点-点的通信了
5、其他没有被接受的 DHCP 服务器在收到 DHCPREQUEST 后就会知道自己的 OFFER 没有被接受,也就不再关心了
6、那个被选中的 DHCP 服务器返回一个 DHCP ACK 消息,src ip 是自己的 ip ,dst ip 是客户机的 ip 。src mac 是服务器的 mac ,dst mac 是客户机的 mac
7、这就完成了一个 lease 。
8、如果客户机是续约,且 Server 发现之前的 ip 已经过期,而且被另外一台客户机所申请,且该服务器是“权威的“则会返回一个 DHCPNAK ,客户机则放弃申请
该 ip ,并从 DHCPDISCOVER 开始,而不是从 DHCPREQUEST 开始。
二、什么是 Rogue DHCP ?
由于目前 DHCP 没有认证功能,如果有人无心启动了 DHCP 服务,但又没有配置好 /etc/dhcpd.conf ,这时就会干扰正常的 ip 租用。
举个例子,我有一个 “权威” 的 DHCP 服务器 172.17.64.34 ,提供的地址是从 172.17.64.244 ~ 248 。这时有人非法启动了一个 DHCP 服务器 ,
其 ip 为 172.17.64.39 , 分配的地址为 172.17.64.249~254 。
假设有一台客户机,它申请 ip 时 ,那台”非法“的 DHCP 服务器先返回一个 DHCPOFFER ,则客户机会拿着那个”非法的 ip“。
然后在后续的过程也会继续申请该 ip ,这就可能造成那些由”权威“的 DHCP 服务器分配的 ip 发生冲突的情况。
三、什么是“权威的”DHCP 服务器
就是允许返回 DHCPNAK 的 DHCP 服务器。默认 ISC DHCP 服务器都不会认为自己是“权威的”
只有那些“权威的” DHCP 服务器才能对一个非法的 request 返回一个 DHCPNAK。
你必须在 /etc/dhcpd.conf 中加入下面的指令
[Copy to clipboard]
[ - ]
CODE:
authoritative;
具体方法
该方法需要一台空闲的客户机。
1、设置接口
[Copy to clipboard]
[ - ]
CODE:
BOOTPROTO=dhcp
PEERDNS=no
2、设置 /etc/dhclient.conf :
[Copy to clipboard]
[ - ]
CODE:
select-timeout 5;
interface “eth1″ {
send fqdn.server-update on;
send dhcp-client-identifier “my-dhcp-client.n7css.com.”;
send fqdn.fqdn “my-dhcp-client.n7css.com.”;
send fqdn.encoded on;
send host-name “my-dhcp-client.n7css.com.”;
}
第一句是最主要的。目的让客户机不要立即选择 DHCPOFFER ,而是等待5秒。否则 dhclient 只会打印它所接受的那个 DHCPOFFER
3、以 root 身份执行命令
[Copy to clipboard]
[ - ]
CODE:
[root@my-dhcp-client root]# dhclient -1 eth1
Internet Systems Consortium DHCP Client V3.0.1
Copyright 2004 Internet Systems Consortium.
All rights reserved.
For info, please visit http://www.isc.org/products/DHCP
Listening on LPF/eth1/00:01:02:97:75:d3
Sending on LPF/eth1/00:01:02:97:75:d3
Sending on Socket/fallback
DHCPDISCOVER on eth1 to 255.255.255.255 port 67 interval 7
DHCPOFFER from 172.17.64.39
DHCPOFFER from 172.17.64.34
DHCPREQUEST on eth1 to 255.255.255.255 port 67
DHCPACK from 172.17.64.34
bound to 172.17.64.247 — renewal in 2726 seconds.
[root@my-dhcp-client root]#
可以看到上面指出 dhclient 收到两个 DHCPOFFER ,一个是来自 172.17.64.39 ,一个是来自 172.17.64.34 ,
所以你只要用
[Copy to clipboard]
[ - ]
CODE:
grep DHCPOFFER |grep -v ‘172.17.64.39′ |awk ‘{print $3}’
就可以找出有那些非法的 DHCP 服务器了
此外还有一个想法,就是利用 dhclient.conf 中的 require 来强制客户机只能从那些服务器获得 ip
只有 server 返回某个选项时(我们可以自定义一个 option space ),客户机才接受这个 offer ,否则拒绝
不知道有没有人试过?
转自chinaunix
相关文章推荐
- 如何探测网络上非法的 DHCP 服务器
- 如何查找网络中其他非法DHCP服务器【经典博客】
- 如何查找网络中其他非法 DHCP 服务器
- 在PC上安装虚拟机进行网络实验。如何规划,进行安装DHCP服务实验。还有dns服务器的验证
- 细说DHCP网络协议和如何搭建DHCP服务器
- 使用Windows操作系统的客户端如何设置NTP网络服务器
- 如何建立DHCP服务器
- WEB服务器安装教程:如何安装IIS - WINDOWS XP下IIS的安装教程(凡人网络原创VenShop.Com)
- 李逵碰李鬼,揪出非法的DHCP服务器 推荐
- Linux有问必答:nginx网络服务器上如何阻止特定用户代理(UA)
- 如何建立DHCP服务器
- react native中如何往服务器上传网络图片
- 如何判断linux DHCP服务器状态/关闭/开启命令
- 如何编写高性能的网络服务器
- 配置设备作为DHCP中继(中继与服务器处于同一网络)
- Atitit 网络设备的自动发现机制 需求如下: 1、自动获取当前设备所在网段及当前与当前网段有连接的网段的所有IP,并判断出是哪类设备。如:服务器、交换机、防火墙等。 2、如何根据第1点得到的
- react native中如何往服务器上传网络图片
- DHCP服务器在企业网络中的应用 推荐
- Linux_入门之网络管理及DHCP服务器搭建
- DHCP服务器如何检测穿过中继代理的IP地址冲突(gratuitous ARP肯定是不行的) 推荐