You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

本地网络多余DHCP服务器检测脚本无响应问题求助

排查Scapy DHCP脚本无响应问题

1. 确认网络接口绑定是否正确

DHCP报文以广播形式发送,必须确保Scapy绑定到当前连接目标网络的活跃网卡:

  • 可以通过ip addr查看系统网卡名称,在脚本中显式指定:
    conf.iface = "eth0"  # 替换为你的实际网卡名,比如enp0s3、wlan0等
    
  • 也可以在发送报文时直接指定接口:ans, unans = srp(..., iface="eth0")

2. 校验DHCP Discover报文构造规范

DHCP服务器对报文格式有严格要求,缺少关键字段会直接丢弃请求,正确的构造示例:

from scapy.all import *

# 生成随机MAC作为客户端硬件地址
client_mac = RandMAC()
# 构造标准DHCP Discover报文
dhcp_discover = Ether(dst="ff:ff:ff:ff:ff:ff") / \
                IP(src="0.0.0.0", dst="255.255.255.255") / \
                UDP(sport=68, dport=67) / \
                BOOTP(op=1, chaddr=client_mac) / \
                DHCP(options=[("message-type", "discover"), "end"])

重点检查:

  • 以太网层目标MAC必须是广播地址ff:ff:ff:ff:ff:ff
  • IP层源为0.0.0.0、目标为255.255.255.255
  • UDP端口固定为源68、目标67
  • DHCP选项必须包含message-type=discover,且以end结尾

3. 检查运行权限

Scapy发送原始网络报文需要root权限,直接运行脚本会被系统拦截,必须以sudo启动:

sudo python3 your_dhcp_script.py

4. 调整超时与过滤规则

  • 超时设置过短会导致未等待到响应就结束,建议将srp的timeout参数设为5-10秒:ans, unans = srp(dhcp_discover, timeout=10)
  • 避免在srp中添加过于严格的过滤条件,比如仅过滤特定MAC,会漏掉其他DHCP服务器的响应

5. 排查系统防火墙拦截

Ubuntu的ufw或iptables可能会阻断DHCP流量:

  • 临时关闭ufw测试:sudo ufw disable
  • 查看iptables规则是否拦截UDP 67/68端口:sudo iptables -L -n

6. 升级Scapy版本

旧版Scapy的DHCP协议处理存在兼容性问题,升级到最新版:

pip3 install --upgrade scapy

内容的提问来源于stack exchange,提问作者Alex Rebell

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.25 09:44:53