在 TFTP 实现中解包读取请求的结构
Struct unpacking a Read Request in TFTP implementation
关于 TFTP(简单文件传输协议)的 RFC,RRQ/WRQ(Read\write 请求)数据包具有以下格式:
2 bytes string 1 byte string 1 byte
------------------------------------------------
| Opcode | Filename | 0 | Mode | 0 |
------------------------------------------------
模式可以是“netascii”、“八位字节”(相当于二进制)或“邮件”。事情是 netascii 是 8 个字母,八位字节有 5 个,邮件有 4 个。
我在我的客户端中创建我的数据包是这样的:
paq = struct.pack('!H'+str(len(fileName))+'sB'+str(len(mode))+'sB', 02, fileName, 0, mode, 0)
然后我将数据包发送到服务器,这样服务器就知道会发生什么(在 RRQ 情况下读取,否则写入)。
问题是,如果我不知道服务器端的字符串长度,我不知道如何解压数据包...只有客户端知道文件长度和模式长度,因为他使数据包。
我应该在 RRQ/WRQ 数据包之前将长度发送到服务器,以便我知道解包时使用的格式吗?还有别的办法吗?
谢谢!
如果收到的数据包在字节数组p
中,可以用find()
.
搜索0
分隔符
opcode = p[0:2].decode('ASCII')
nameEnd = p.find(b'[=10=]', start=2)
filename = p[2:nameEnd].decode('ASCII')
modeEnd = p.find(b'[=10=]', start=nameEnd+1)
mode = p[nameEnd+1:modeEnd].decode('ASCII')
关于 TFTP(简单文件传输协议)的 RFC,RRQ/WRQ(Read\write 请求)数据包具有以下格式:
2 bytes string 1 byte string 1 byte
------------------------------------------------
| Opcode | Filename | 0 | Mode | 0 |
------------------------------------------------
模式可以是“netascii”、“八位字节”(相当于二进制)或“邮件”。事情是 netascii 是 8 个字母,八位字节有 5 个,邮件有 4 个。
我在我的客户端中创建我的数据包是这样的:
paq = struct.pack('!H'+str(len(fileName))+'sB'+str(len(mode))+'sB', 02, fileName, 0, mode, 0)
然后我将数据包发送到服务器,这样服务器就知道会发生什么(在 RRQ 情况下读取,否则写入)。
问题是,如果我不知道服务器端的字符串长度,我不知道如何解压数据包...只有客户端知道文件长度和模式长度,因为他使数据包。
我应该在 RRQ/WRQ 数据包之前将长度发送到服务器,以便我知道解包时使用的格式吗?还有别的办法吗?
谢谢!
如果收到的数据包在字节数组p
中,可以用find()
.
0
分隔符
opcode = p[0:2].decode('ASCII')
nameEnd = p.find(b'[=10=]', start=2)
filename = p[2:nameEnd].decode('ASCII')
modeEnd = p.find(b'[=10=]', start=nameEnd+1)
mode = p[nameEnd+1:modeEnd].decode('ASCII')