在Linux下用C语言生成Socket,wireshark在frame中检测错误

Generate Socket in C under Linux and wireshark detect error in frame

我在 Linux 下使用 "traditional way":

在 C 中创建套接字
sock=socket(AF_INET, SOCK_STREAM, 0);

紧接着,我们连接它(成功)并使用以下方式发送帧:

send(sock, buffer, bufferSize, 0);

不幸的是,当帧被发送到自动机时,它不会 "receive" 它(我们不知道为什么)。 但是如果它发送到 "classical" 服务器就没问题。

所以,当我用wireshark检查框架时,出现了一个问题:

Malformed Packet

如您所见,第 6 帧格式不正确。 看起来 TCP header 中存在问题,但是什么以及如何解决它?

非常感谢。

As you can see, frame #6 is malformed. It looks like there is a problem in TCP header but what and how solve it?

Wireshark 尝试将数据包解释为来自 distcc 的通信,可能是因为它正在使用 distcc (3632) 端口。它不会抱怨 TCP header 中的任何内容,但会抱怨它无法将数据包的有效负载解释为 distcc 应用层协议。

虽然您的应用程序一无所知,但它可能没有使用 distcc 协议,而只是使用端口 3632。到目前为止,来自 wireshark 的信息是错误的,因为您从未打算使用 distcc 协议。 "fix" 将 wireshark 中的问题移至另一个端口或禁用将 wireshark 中的端口解释为 distcc。

请注意,这仅修复了数据包格式错误的错误显示(因为它不是)。它与修复您实际想要的通信无关,并且您的问题中没有任何信息可以帮助解决此问题。

非常感谢您的所有评论(和请求)。 问题出在端口上,如 buy Steffen Ullrich 所述。

我已将服务器和客户端从 3632 端口切换到 3633 端口,wireshark 将帧分析为 "classical" TCP 协议,并且每个 if 都正常。