使用scapy发布DHCP

时间:2014-03-28 18:42:50

标签: python dhcp scapy

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

我有想要伪造RELEASE数据包的机器的MAC地址。

我用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")]))

1 个答案:

答案 0 :(得分:7)

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

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

就为什么它可能不适合你而言,有几件事情会浮现在脑海中。

  1. mac地址可能不正确,你没有包含你设置my_mac的方式......你不能在这里简单地使用一个字符串。您可以使用从get_if_raw_hwaddr函数获得的值。
  2. 您在消息的bootp部分中缺少客户端地址和事务ID。
  3. 您缺少服务器标识符,并以DHCP选项结束。如果使用客户端标识符获取地址,则必须在发行版中使用此标识符。标准规定了这一点,但并非所有DHCP服务器都要求它。
  4. 这是一个适合我的例子。您可以通过阅读RFC specification和/或使用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']))