我正在寫我自己的服務器使用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