使用socket将用户名和密码发送到tcp服务器

mjo*_*weg 6 python sockets

我需要将用户名、密码和消息发送到 TCP 服务器,以获得我正在处理的代码挑战所需的输出。我收到了这组指示:

Connect to alien server ('localhost', 10000),
Then send USER followed by aliensignal,
Then send PASS followed by unlockserver,
Next SEND followed by moonbase.
Then send END and if all followed key will provided.
Run Code Online (Sandbox Code Playgroud)

我写了一个 python 代码,它的功能与它所说的完全一样:

import socket

clientsocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
clientsocket.connect(('localhost', 10000))
clientsocket.send('USER: aliensignal')

clientsocket.send('PASS: unlockserver')
clientsocket.send('SEND: moonbase')
clientsocket.send('END')
data = clientsocket.recv(4096)
print(data)
Run Code Online (Sandbox Code Playgroud)

但我得到的输出是:

############# DARKSTORE KEY SERVER SPEC ############################

Set username then password. Once set send name then end connection

and you access key will be sent.


USER: Tell server you will be sending username

PASS: Tell server you will be sending password

SEND: Tell server you will be sending data. (Must be authenticated)

END: Tell server to end transaction. 

######################################################
Run Code Online (Sandbox Code Playgroud)

无论我是否发送用户名和密码,它都会给我这个输出。有谁知道为什么会发生这种情况?

Dar*_*der 6

首先,\xe2\x80\x99 不需要 USER、PASS、SEND 和 END 之后的冒号。

\n\n

此外,挑战告诉您每次发送后都需要接收数据。

\n\n

最后需要将关键词和数据分开发送

\n\n

所以:

\n\n
import socket\n\nclientsocket = ...\nclientsocket.connect(...)\n\nclientsocket.send(\xe2\x80\x98USER\xe2\x80\x99)\nprint(clientsocket.recv(1024))\nclientsocket.send(\xe2\x80\x98aliensignal\xe2\x80\x99)\nprint(clientsocket.recv(1024))\n#etc...\n
Run Code Online (Sandbox Code Playgroud)\n