2016-03-06 57 views
-1

我正在寫我自己的服務器使用python從客戶端獲取數據,我在線閱讀客戶端發送到服務器時掩蓋其數據。我已經得到了整個握手的事情,但我還沒有找到一個能夠揭示數據包的代碼。我發現了一個聲稱這樣做的代碼,但它不適合我。是否有預製的功能或包裝可以做到這一點?任何幫助將不勝感激。解決我如何揭露客戶端使用python數據

更新的代碼

# -----------------LISTEN FOR INCOMING DATA FUNCTION----------------- # 

def listening_for_msgs(conn): 
    while True: 
     try: 
      rcv_msg = conn.recv(1024) 
      rcv_msg_str = str(rcv_msg[:].decode("utf-8")) 
      rcv_msg_list = rcv_msg_str.split('\r\n') 
      if rcv_msg_list[0] == 'GET/HTTP/1.1': 
       HandshakeThread = startHandshakeThread(rcv_msg_str, conn) 
       HandshakeThread.start() 
     else: 
      pass 
     except UnicodeDecodeError: 
      client_resp = unmask_data(rcv_msg) 
      print(client_resp) 

# -----------------UNMASKING CLIENTS PACKET FUNCTION----------------- # 

def unmask_data(rcv_msg): 
    # as a simple server, we expect to receive: 
    # - all data at one go and one frame 
    # - one frame at a time 
    # - text protocol 
    # - no ping pong messages 
    data = bytearray(rcv_msg) 
    if len(data) < 6: 
     raise Exception("Error reading data") 
    # FIN bit must be set to indicate end of frame 
    assert(0x1 == (0xFF & data[0]) >> 7) 
    # data must be a text frame 
    # 0x8 (close connection) is handled with assertion failure 
    assert(0x1 == (0xF & data[0])) 

    # assert that data is masked 
    assert(0x1 == (0xFF & data[1]) >> 7) 
    datalen = (0x7F & data[1]) 

    str_data = '' 
    if datalen > 0: 
     mask_key = data[2:6] 
     masked_data = data[6:(6 + datalen)] 
     unmasked_data = [masked_data[i]^mask_key[i % 4] for i in range(len(masked_data))] 
     str_data = str(bytearray(unmasked_data).decode("utf-8")) 
    return str_data 
+0

你的意思是_not working_?請具體! – Arman

+2

「我找到了一個聲稱這樣做的代碼,但它不適合我」。你還可以添加一些關於預期行爲的細節,以及實際發生的事情嗎? – kkaosninja

+0

經過一些調試後,我得到了我需要的數據,但我沒有將該函數賦值給一個變量以從函數中獲取返回的str_data。感謝您的幫助:) – neziy

回答

0

我使用python,從客戶端得到數據寫我自己的服務器,我已經在客戶端口罩發送到服務器時,它的數據讀取線上。

我建議您再讀一遍,也許使用額外的資源。您正在將來自正常Web請求的代碼想法與WebSocket連接混合在一起。掩碼只與WebSocket連接有關。描述WebSockets掩碼如何工作,WebSocket連接如何從Web請求建立以及WebSocket與普通套接字不同的原因,對於這個問題來說太廣泛了。如果你想得到快速的結果使用existing libraries。如果您想了解所有這些工作如何編寫您自己的代碼,請閱讀specification for WebSockets或研究現有庫的源代碼。

+0

我同意你的看法......事實證明,我得到了我需要的數據,但是我沒有將該函數賦值給一個變量以從函數中獲取返回的str_data。 – neziy

相關問題