【发布时间】:2015-02-12 16:16:57
【问题描述】:
我找到了这段代码来检测帧中加密数据的长度:
header = self.request.recv(5)
if header == '':
#print 'client disconnected'
running = False
break
(content_type, version, length) = struct.unpack('>BHH', header)
data = self.request.recv(length)
来源:
- https://github.com/EiNSTeiN-/poodle/blob/master/samples/poodle-sample-1.py
- https://gist.github.com/takeshixx/10107280
- https://gist.github.com/ixs/10116537
这段代码,监听客户端和服务器之间的连接。当客户端与服务器通信时,self.request.recv(5) 可以获得帧中标题的长度。然后我们使用这个长度来获取数据。
如果我们打印客户端和服务器之间的交换:
Client --> [proxy] -----> Server
length : 24 #why 24 ?
Client --> [proxy] -----> Server
length: 80 #length of the data
Client <-- [proxy] <----- Server
我们可以看到客户端会向服务器发送两个数据包。 如果我改变了
data = self.request.recv(length)
到
data = self.request.recv(4096)
只进行一次交换。
Client --> [proxy] -----> Server
length: 109 #length of the data + the header
Client <-- [proxy] <----- Server
我的问题是为什么我们只需要 5 的大小来获取长度、内容类型信息?有没有可以理解的文档?
为什么有两个请求:一个是 24,另一个是我们数据的长度?
【问题讨论】:
标签: python sockets python-2.7 unpack