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

Socket Traffic Byte Duplication (?)

本文关键字:复制 流量 字节 套接字      更新时间:2023-10-16

我会尽量保持简洁。我正在处理一个原始的二进制网络跟踪,我正在对一个可以解析其内容的服务进行重播。我粗糙的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, '');
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    

窟?

问题与telnet协议有关。字节0xff在telnet解释中意味着命令IAC,它出现在telnet命令之前。例如:

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

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