2016-03-06 60 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

相关问题