gpt4 book ai didi

c++ - 在 wireshark 中查看来自 TFTP 客户端的未知操作码

转载 作者:行者123 更新时间:2023-11-30 02:59:17 24 4
gpt4 key购买 nike

大家晚上好

我在为使用#include 的 C++ 作业创建 TFTP 客户端时遇到问题

我正在发送字符缓冲区:

buffer={'0','2','f','i','l','e','n','a','m','e','0','o','c','t','e','t','0'};

使用代码:

sendto(sock,buffer,strlen(buffer), 0, (sockaddr *) &serverAddr, sizeof(sockaddr));

但是当我在 WireShark 中查看此传输时,当我查看数据包的操作码部分时,它显示“操作码:未知 (12338)”。即使它已经从字符串中选择了操作码

enter image description here

我完全被卡住了,任何帮助将不胜感激。我很确定如果我可以发送和接收一条消息,我就可以很容易地处理剩下的事情。

只是把我所做的扔在这里,但标记的答案基本上就是它使用了 winsock2 中的 BYTE(不知道我是否需要,但总比后悔好)

buffer={(BYTE)0,(BYTE)2,'f','i','l','e','n','a','m','e',(BYTE)0,'o','c','t','e','t',(BYTE)0};

sendto(sock,buffer,sizeof(buffer), 0, (sockaddr *) &serverAddr, sizeof(sockaddr));

最佳答案

不是strlen(buffer)而是sizeof(buffer)...

strlen 在第一次出现 '\0' 时停止计算字符 - 因此它会为您的缓冲区数组返回未指定的值,因为 '\0' 不存在于您的缓冲区。

如果你想用操作码 02 开始你的缓冲区然后将它作为整数传递而不是它们的数字表示:

buffer={0,2,'f','i','l','e','n','a','m','e','0','o','c','t','e','t','0'};
// ^ ^ simple numbers - not characters - not sure about rest of your buffer

关于c++ - 在 wireshark 中查看来自 TFTP 客户端的未知操作码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13000674/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com