[英]Unkown Opcode from TFTP Client when looked at in wireshark
各位晚上好。
我在使用#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中查看此转移时,当我查看数据包的操作码部分时,它会显示“操作码:未知(12338)”。 即使它已从字符串中选择了操作码
我完全被卡住了,任何帮助都会受到赞赏。 我很确定我是否可以发送和接收消息,我可以很容易地处理剩下的事情。
只是在这里扔掉我所做的但是标记的答案基本上是使用来自winsock2的BYTE(不知道我是否需要但是比安全更好)
缓冲液= {(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'
停止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
十进制的12338是0x30,十六进制的0x32,它对应于缓冲区中的'0'和'2'。
你使用ascii字符,但你需要使用十进制/整数,通过在缓冲区中将它们设置为(char) 0x00
和(char) 0x02
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.