【发布时间】:2018-06-02 10:28:30
【问题描述】:
我正在做 DHCP 中继 POC。我的设置如下。
DHCP 客户端(VX-works)----------- DHCP 中继----------- DHCP 服务器(VXworks)
在此设置中,DHCP 客户端正在发送 DICOVER 数据包,但中继代理没有收到数据包。我查看了代码,发现在套接字上应用了 Berkeley Packet Filtering (BPF)。 DHCP 中继只是丢弃数据包而不将其转发到服务器。
为了进一步调试,我从代码中删除了 BPF 过滤器和校验和验证部分。
现在,DHCP 中继正在转发数据包,但数据包不是 DHCP 服务器所期望的。 DHCP 中继正在正确地将数据包从广播更改为单播。服务器端收到的帧、以太网报头、IP 报头和 UDP 报头都是正确的(我在 Wireshark 日志中检查过),但引导协议选项字段不正确。
我还在客户端捕获了 Wireshark 日志。客户端正在按预期发送 DICOVER 数据包。
如果您需要更多信息,请发表评论。
真的:基于 ISC dhcrelay(4.3.1P1) Linux(3.14 内核)
提前致谢。
编辑:下面是在 DHCP 客户端捕获的单个数据包的十六进制转储。
ff ff ff ff ff ff 00 20 61 1e 9e 14 08 00 45 00
01 1a 4f fe 40 00 20 11 09 d6 00 00 00 00 ff ff
ff ff 00 44 00 43 01 06 fd 9b 01 01 06 00 00 ae
af 53 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 20 61 1e 9e 14 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
00 00 00 00 00 00 63 82 53 63 35 01 01 39 02 02
4e 37 04 0f 06 03 01 ff
【问题讨论】:
-
为什么要从代码中删除校验和验证部分?校验和是否不正确并且数据包被丢弃?
-
实际上,ISC DHCP 中的 BPF 正在丢弃数据包,因此为了进一步调试,我删除了应用在中继创建的 RAW 套接字上的 BPF 过滤器。但是随后校验和失败错误限制了要转发到服务器的数据包。所以我删除了校验和部分。现在我在客户端捕获了数据包,它正在广播完美的数据包,而 BPF 仅在内核中丢弃数据包。所以我认为我的博通芯片正在破坏数据包。这只是一个假设。请提供您的意见。
-
能否在 BPF 丢弃数据包之前将其转储,以尝试查看 BPF 丢弃数据包的原因?