套接字流量字节重复(?)

时间:2014-07-11 06:46:11

标签: python c++ sockets

我会尽量保持简洁。我正在使用原始二进制网络跟踪,我将重放一个可以解析其内容的服务。我粗糙的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    

笏?

1 个答案:

答案 0 :(得分:2)

此问题与telnet协议有关。字节0xff means in telnet解释为命令IAC,它位于telnet命令之前。例如:

IAC BRK 0xff 0xf3
IAC EL  0xff 0xf8

序列0xff 0xff用于转义此IAC以发送0xff