如何确认应用程序是否收到数据包

时间:2011-09-10 12:26:43

标签: linux sockets dhcp

我的疑问很奇怪..

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

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

无论如何确认数据包实际上是由dhcp服务器处理还是由Linux ip stack丢弃?

DHCP服务器是专有代码,因此我无法修改它以添加更多日志或检查recv功能。

将其视为基于套接字而非DHCP特定的通用问题。我最感兴趣的是我们怎么能从统计信息或其他东西中知道在适当的套接字缓冲区中收到了数据包。

2 个答案:

答案 0 :(得分:0)

您可以通过使用调试符号构建DHCP服务器来实现此目的 - 您的发行版可能已经准备好了* -dbg包。通过将类似gdb的调试器附加到进程,您可以拦截消息并对其进行调试以查看问题所在。

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

答案 1 :(得分:0)

如果你在dhcp服务器上运行了strace并且没有从select中获取任何内容,则很可能没有收到该帧。 要检查的几件事

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

重新检查您的strace命令行选项并启用调试和详细程度。确保何时使用strace的另一个方法是跟随分叉... -Ff

希望有所帮助