使用scapy发布DHCP

Vis*_*ire 1 python dhcp scapy

我想将DHCP发布数据包发送到我的局域网上的DHCP服务器.

我有机器的MAC地址,我想伪造RELEASE数据包.

我用Google搜索,没有找到任何有用的东西.有人能指出我正确的方向吗?

我尝试发送一个包含选项message-type:release的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")]))
Run Code Online (Sandbox Code Playgroud)

mda*_*adm 7

谢谢你捅了一下.DHCP释放消息需要记住一件重要的事情.将消息发送到服务器时,实际上不会导致在本地计算机上释放IP地址.如果您正在考虑使用RELEASE创建DOS或其他攻击的演示,那么您将没有太多运气.

释放消息只是告诉DHCP服务器客户端正在放弃网络地址并取消剩余的租约.客户端在放弃地址后停止使用该地址.

关于为什么它可能不适合你,有几件事情会浮现在脑海中.

  1. mac地址可能不正确,你没有包括如何设置my_mac ...你不能在这里简单地使用一个字符串.您可以使用从get_if_raw_hwaddr函数获取的值.
  2. 您缺少消息的bootp部分中的客户端地址和事务ID.
  3. 您缺少服务器标识符,并以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']))
Run Code Online (Sandbox Code Playgroud)