2010-01-02 108 views
3

我試圖在Twisted中實現一個SSL客戶端,它只需連接到套接字並讀取二進制數據(特別是數據元組)。我已經得到代碼,似乎連接和斷開連接成功,但沒有數據是有史以來從套接字讀取。從扭曲的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錯誤實例終止。

+0

連接完成後,對方是否發送了一些內容? – iny 2010-01-03 10:28:36

+0

如果'self.io'是'StringIO'的一個實例,那麼你應該調用'self.io.getvalue()'而不是'self.io.getValue()'。 – jfs 2010-06-09 12:56:25

回答

2

看看ssldump或wireshark。由於您沒有看到在此級別傳送的任何數據,因此您應該將級別降到這些工具之一。其中一個可能會顯示SSL協商錯誤,或者服務器從未發送任何字節,或根據您迄今爲止發現的內容很難猜出的其他內容。你仍然可能沒有完整的答案,但你會有更多的難題。