我正在写我自己的服务器使用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
你的意思是_not working_?请具体! – Arman
“我找到了一个声称这样做的代码,但它不适合我”。你还可以添加一些关于预期行为的细节,以及实际发生的事情吗? – kkaosninja
经过一些调试后,我得到了我需要的数据,但我没有将该函数赋值给一个变量以从函数中获取返回的str_data。感谢您的帮助:) – neziy