我会尽量保持简洁。我正在使用原始二进制网络跟踪,我将重放一个可以解析其内容的服务。我粗糙的python客户端的工作原理如下:
with closing(Telnet('localhost', 5001)) as conn, open(fname, 'rb') as trace:
for seq, source, packet in split(trace):
conn.write(packet)
这(大多数)按预期工作。它是用C ++接收的,代码如下:
string temp(8192, '\0');
int status = ::recv(socket, &temp[0], 8192, 0);
该问题仅针对重复的字节序列ff
进行了演示。一个21字节的数据包工作:
Send: 000000150000000e00000001000000050005d6e480
Recv: 000000150000000E00000001000000050005D6E480
一个29字节的数据包不 - 它被收到 30 字节:
Send: 0000001d0000000e000000010000000d000dd63380f400ff0000030203
Recv: 0000001D0000000E000000010000000D000DD63380F400FFFF0000030203
53字节数据包也会失败,在远程端报告 57 字节:
Send: 000000350000000e00000001000000250008d68f001600000008d633000c0001000ed68f001700003840ffffffff0007d68f80f300
Recv: 000000350000000E00000001000000250008D68F001600000008D633000C0001000ED68F001700003840FFFFFFFFFFFFFFFF0007D68F80F300
有一个更随意的序列,以及由此产生的接收方:
Send: 54ff68ff69ff73ff20ff69ff73ff20ff61ff20ff74ff65ff73ff74ff2e # chr(255).join('This is a test.') - length 29.
Recv: 54FFFF68FFFF69FFFF73FFFF20FFFF69FFFF73FFFF20FFFF61FFFF20FFFF74FFFF65FFFF73FFFF74FFFF2E // length 43
笏?
答案 0 :(得分:2)
此问题与telnet协议有关。字节0xff
means in telnet解释为命令IAC,它位于telnet命令之前。例如:
IAC BRK 0xff 0xf3
IAC EL 0xff 0xf8
序列0xff 0xff
用于转义此IAC以发送0xff
。