如何确认一个数据包是否被应用程序接收到

我的疑问很奇怪

在我的Linux服务器上,DHCP服务器应用程序正在端口号547上等待DHCP客户端消息。

即使我在wireshark上看到来自DHCP客户端的消息(在我的Linux服务器上运行).dhcp服务器没有回应。

有无论如何确认数据包实际上是由DHCP服务器处理或由Linux的IP堆栈之间下降?

DHCP服务器是专有代码,所以我不能修改它来添加更多的日志或检查recvfunction。

只要将其视为基于套接字的通用问题而不是DHCP特定的问题。 我最感兴趣的是如何从统计数据或其他信息中知道数据包已经被合适的套接字缓冲区接收到了。

您可以通过使用调试符号构建DHCP服务器来实现这一点 – 您的分发版本可能已经有了一个* -dbg软件包。 通过将类似gdb的调试器附加到进程中,您可以拦截消息并对其进行调试,以查看问题出在哪里。

但是,我首先尝试使用通常的可能性,即日志消息。 您是否尝试过在您的DHCP守护进程中激活调试日志?

如果你在dhcp服务器上运行strace,并且没有从select中得到任何回应,那么最有可能不会收到该帧。 有几件事要检查

  • 您确定您的客户端正在发送IPv6 DHCP请求而不是IPv4(端口67)吗?
  • 确保服务器上的端口547上没有其他进程正在侦听。

重新检查strace命令行选项并启用调试和详细程度。 当你使用strace还有一件事要确定,就是跟着叉子走

希望有所帮助