如何使用python从客户端取消数据屏蔽

2024-04-27 07:21:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在用python编写自己的服务器,它从客户机获取数据,我在网上读到客户机在发送到服务器时屏蔽了它的数据。我已经搞定了握手的全部内容,但我还没有找到一个能解开数据包掩码的代码。我找到了一个代码,声称可以做到这一点,但它对我来说不起作用。是否有现成的功能或软件包可以做到这一点?任何帮助都将不胜感激。在

下面是我的代码:

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

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

# -----------------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])

# print("received data len %d" %(datalen,))

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))
return str_data

Tags: to代码dataifismsgassertconn
1条回答
网友
1楼 · 发布于 2024-04-27 07:21:50

I'm writing my own server using python that gets data from the client and I've read online that the client masks its data when sending to the server.

我建议你再读一遍,也许可以使用更多的资源。您将普通web请求与WebSocket连接的代码思想混合在一起。屏蔽仅与WebSocket连接相关。描述WebSockets掩蔽是如何工作的,如何从web请求建立WebSocket连接,以及为什么WebSockets与普通sockets不同等等对于这个问题来说太宽泛了。如果您想快速得到结果,请使用existing libraries。如果您想了解如何编写自己的代码,请阅读specification for WebSockets或研究现有库的源代码。在

相关问题 更多 >