首页 > 解决方案 > Linux下用C语言生成Socket,wireshark检测帧错误

问题描述

我在 Linux 下使用“传统方式”在 C 中创建 Socket:

sock=socket(AF_INET, SOCK_STREAM, 0);

之后,我们(成功地)连接它并使用以下命令发送帧:

send(sock, buffer, bufferSize, 0);

不幸的是,当帧被发送到自动机时,它不会“接收”它(我们不知道为什么)。但如果它发送到“经典”服务器就可以了。

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

Malformed Packet

在此处输入图像描述

如您所见,第 6 帧格式错误。看起来 TCP 标头中存在问题,但是什么以及如何解决呢?

提前谢谢了。

标签: clinuxsocketswireshark

解决方案


如您所见,第 6 帧格式错误。看起来 TCP 标头中存在问题,但是什么以及如何解决呢?

Wireshark 试图将数据包解释为来自distcc的通信,可能是因为它使用了 distcc 的端口(3632)。它没有抱怨 TCP 标头中的任何内容,但它抱怨它未能将数据包的有效负载解释为 distcc 应用层协议。

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

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


推荐阅读