Чтение с сокета SSL в Twisted
Я пытаюсь реализовать клиент SSL в Twisted, который просто должен подключиться к сокету и читать двоичные данные (в частности, кортежи данных). Я получил код до точки, где он, кажется, успешно подключается и отключается, но данные никогда не читаются из сокета.
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 ответ
Посмотрите на ssldump или wireshark. Поскольку вы не видите никаких данных, доставляемых на этом уровне, вам следует перейти на уровень одного из этих инструментов. Один из них может выявить ошибку согласования SSL, или что сервер никогда не отправляет байты, или что-то еще, что трудно угадать, основываясь только на том, что вы обнаружили до сих пор. У вас все еще может не быть полного ответа, но у вас будет больше частей головоломки.