在Twisted中从SSL Socket读取

3 投票
1 回答
755 浏览
提问于 2025-04-15 17:33

我正在尝试在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,都没有任何接收到的方法被调用。难道服务器没有数据可以读取吗?connectionMadeconnectionLost在连接时立即被调用,并且以ConnectionDone错误实例结束。

1 个回答

2

你可以试试ssldump或者wireshark这两个工具。因为你在这个层面上没有看到任何数据,所以可以换个层次来用这些工具。它们可能会显示出SSL协商时的错误,或者服务器根本没有发送任何数据,或者其他一些光凭你目前发现的内容很难猜测到的情况。虽然你可能还是无法得到完整的答案,但至少会有更多的信息帮助你理解整个问题。

撰写回答