在Twisted中从SSL Socket读取
我正在尝试在Twisted中实现一个SSL客户端,这个客户端的主要任务是连接到一个套接字并读取二进制数据(具体来说,是一些数据元组)。我已经把代码写到一个阶段,看起来可以成功连接和断开连接,但从来没有从套接字中读取到任何数据。
class FeedbackHandler(LineReceiver):
MAX_LENGTH = 1024*1024
def connectionMade(self):
log.debug('feedbackHandler connectionMade')
def rawDataReceived(self, data):
log.debug('feedbackHandler rawDataReceived %s' % binascii.hexlify(data))
self.io.write(data)
def lineReceived(self, data):
log.debug('feedbackHandler lineReceived %s' % binascii.hexlify(data))
self.io.write(data)
def connectionLost(self, reason):
log.debug('feedbackHandler connectionLost %s' % reason)
self.deferred.callback(self.io.getValue())
io.close()
这是启动代码:
factory = self.clientProtocolFactory() # a ClientFactory instance
context = self.getContextFactory(CERT_FILE) # a ClientContextFactory
reactor.connectSSL(server, port, factory, context)
不过,当代码运行时,无论是否使用setRawMode
,都没有任何接收到的方法被调用。难道服务器没有数据可以读取吗?connectionMade
和connectionLost
在连接时立即被调用,并且以ConnectionDone
错误实例结束。
1 个回答
2
你可以试试ssldump或者wireshark这两个工具。因为你在这个层面上没有看到任何数据,所以可以换个层次来用这些工具。它们可能会显示出SSL协商时的错误,或者服务器根本没有发送任何数据,或者其他一些光凭你目前发现的内容很难猜测到的情况。虽然你可能还是无法得到完整的答案,但至少会有更多的信息帮助你理解整个问题。