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

时间:2012-10-21 18:12:24

标签: c++ winsock2 tftp

大家晚上好。

我在使用#include

的C ++中为作业创建TFTP客户端时遇到了问题

我正在发送char缓冲区:

  

缓冲液= { '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中查看此转移时,当我查看数据包的Opcode部分时,它会显示“Opcode:Unknown(12338)”。 即使它已从字符串中选择了操作码

enter image description here

我绝对卡住了,任何帮助都会受到赞赏。我很确定我是否可以发送和接收消息,我可以很容易地处理其余的事情。

在这里扔掉我所做的但是标记的答案基本上是 使用来自winsock2的BYTE(不知道我是否需要但是比安慰更安全)

  

缓冲液= {(BYTE)0,(BYTE)2, 'F', 'I', 'L', 'E', 'N', 'A', 'M', 'E',(BYTE )0, '0', 'C', 'T', 'E', 'T',(BYTE)0};

  

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

2 个答案:

答案 0 :(得分:2)

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

strlen在第一次出现'\0'时停止couting字符 - 因此它返回缓冲区数组的未指定值,因为缓冲区中不存在'\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

答案 1 :(得分:1)

12338(十进制)为0x30,0x32(十六进制),对应缓冲区中的“0”和“2”。

您使用ascii字符,但需要使用十进制/整数,方法是将它们设置为缓冲区中的(char) 0x00(char) 0x02