使用scapy释放DHCP
我想在我的局域网中向DHCP服务器发送DHCP释放数据包。
我有我想要伪造释放数据包的机器的MAC地址。
我在网上搜索过,但没有找到有用的信息。有人能给我指个方向吗?
我尝试发送一个包含选项消息类型为释放的DHCP数据包。基本上,我是想释放我自己的IP地址。但这并没有成功。
sendp(Ether(dst=server_mac)/IP(src=my_ip,dst=server_ip)/UDP(sport=68,dport=67)/BOOTP(chaddr=my_mac)/DHCP(options=[("message-type","release")]))
1 个回答
7
谢谢你尝试解决这个问题。关于DHCP释放消息,有一点很重要要记住。当你把这个消息发送给服务器时,并不会真的让你的本地机器释放IP地址。如果你想通过使用RELEASE来演示一个拒绝服务攻击或者其他攻击,可能不会成功。
释放消息只是告诉DHCP服务器,客户端放弃了网络地址,并取消了剩余的租约。之后,客户端需要自己停止使用这个地址。
至于为什么它可能对你不起作用,我想到几个原因。
- 你的MAC地址可能不正确,你没有说明如何设置my_mac...这里不能简单用一个字符串。你可以使用从get_if_raw_hwaddr函数获取的值。
- 你在消息的bootp部分缺少客户端地址和事务ID。
- 你在DHCP选项中缺少服务器标识符和结束标志。如果你用客户端标识符来获取地址,那么在释放时也必须使用这个标识符。标准是这么规定的,但并不是所有DHCP服务器都强制要求。
这里有一个对我有效的例子。你可以通过阅读RFC规范,或者使用Wireshark捕获和观察真实的数据包,了解更多关于DHCP的信息。
from scapy import *
fam,hw = get_if_raw_hwaddr('wlan0')
send(IP(src=my_ip,dst=server_ip) /
UDP(sport=68,dport=67) /
BOOTP(chaddr=hw, ciaddr='192.168.0.101', xid=random.randint(0, 0xFFFFFFFF)) /
DHCP(options=[("message-type","release"), ("server_id", "192.168.0.1"), 'end']))