【问题标题】:DHCP release using scapy使用 scapy 释放 DHCP
【发布时间】:2014-03-28 18:42:49
【问题描述】:

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

我有要为其伪造 RELEASE 数据包的机器的 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")]))

【问题讨论】:

  • 你没有提供太多关于你已经尝试过的信息......我自己不知道协议,但我想你会简单地打开一个套接字到 DHCP 服务器的地址在默认的 DHCP 端口上,并根据 DHCP 规范编写 RELEASE 指令,该规范应该是现成的。
  • 查看this example 并将消息类型调整为释放。如果它对您不起作用,请返回并编辑您的帖子以包含您尝试过的代码,那么我很乐意为您提供帮助。
  • @mdadm 编辑了我的问题。
  • @VishalD 请参阅下面的回复。

标签: python dhcp scapy


【解决方案1】:

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

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

就为什么它可能不适合你而言,我想到了几件事。

  1. mac 地址可能不正确,您没有包括如何设置 my_mac...您不能在这里简单地使用字符串。您可以使用从 get_if_raw_hwaddr 函数获得的值。
  2. 您在消息的 bootp 部分中缺少客户端地址和事务 ID。
  3. 您缺少服务器标识符,并以 DHCP 选项结尾。如果您使用客户端标识符来获取地址,则必须在版本中使用它。标准规定了这一点,但并非所有 DHCP 服务器都要求这样做。

这是一个适合我的例子。您可以通过阅读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']))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多