【问题标题】:How to confirm if a packet is received by application如何确认应用程序是否接收到数据包
【发布时间】:2011-09-10 12:26:42
【问题描述】:

我的怀疑很奇怪..

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

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

有没有办法确认数据包实际上是由 dhcp 服务器处理的,还是被 Linux ip stack 丢弃的?

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

只需将其视为基于套接字而不是特定于 DHCP 的通用问题。我的兴趣是我们如何从统计数据或其他内容中知道数据包已在适当的套接字缓冲区中收到。

【问题讨论】:

  • 您在服务器上尝试过 tcpdump() 吗?可能是路由问题 - 应该将其移至 SuperUser。
  • 其实我是在服务器上运行wireshark
  • 我对在 Linux 上运行专有 DHCP 服务器背后的故事有兴趣。
  • 这个 dhcp 服务器应用程序已经过修改,支持 IPv6 和其他用于实验的东西 ..

标签: linux sockets dhcp


【解决方案1】:

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

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

【讨论】:

  • 我认为 codingfreak 正在入侵嵌入式设备,修改环境的手段有限。
  • 我正在尝试使用作为应用程序一部分的已经可用的调试消息。根据应用程序帮助,如果您在启动时启用某些选项,您可以看到应用程序处理的每条消息。但我在 LOG 中没有看到,所以这意味着 DHCP 服务器没有收到任何权利?
  • 不一定,这取决于您的 dhcp-server 的健谈程度。如果 Steve-O 是正确的并且您使用的是专有服务器,那么您可能不走运。我想你确实尝试过重启一切的惯常做法?
  • 我什至尝试了 STRACE 工具,发现 dhcpserver 正在等待选择命令 .. 所以这意味着所有来自客户端的请求消息都没有到达服务器 :)
  • hrm... 毕竟可能是内核接口的问题。我会建议使用 CLIENT_ID 或类似的配置问题,但如果是选择,它可能根本不会收到消息。如果以这种方式构建,您是否还 strace 任何子进程?守护进程是否曾经工作过?
【解决方案2】:

如果您在 dhcp 服务器上运行了 strace,但它没有从 select 中得到任何返回,那么它很可能没有收到帧。 需要检查的几件事

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

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

希望有帮助

【讨论】:

  • 在我的wireshark中,我清楚地看到了一个为端口指定的DHCPv6请求消息..我会尝试你共享的fork选项..thanx :)
猜你喜欢
  • 1970-01-01
  • 2015-06-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多