Проблема со входом на свой сервер TCP Python
Вкратце: написал вот такой вот небольшой сервер на Python, но при подключении к нему с виртуалки и вводе username происходит такое:
Не могу разобраться, в чём проблема.
class RequestHandler(socketserver.BaseRequestHandler):
def handle(self):
self.request.sendall("Auth panel\nEnter the username: ".encode())
username = self.request.recv(1024)
if username.strip() != "tzk":
self.request.sendall("[-] Username is invalid!\nExit\n".encode())
return -1
self.request.sendall("Enter the password: ".encode())
password = self.request.recv(1024).strip()
if md5(password.encode()).hexdigest() != passwordhash:
self.request.sendall ("[-] Password is invalid\nExit\n".encode())
return -2
self.request.sendall("Hello, admin!\n".encode())
class ThreadedTCPServer (socketserver.ThreadingMixIn, socketserver.TCPServer):
pass
if __name__ == '__main__':
if len (sys.argv) > 1:
port = int(sys.argv [1])
else:
print ("Usage Python " + sys.argv [0]+ "<port>")
sys.exit(-1)
HOST, PORT = "0.0.0.0", port
server = ThreadedTCPServer((HOST,PORT), RequestHandler)
ip, port = server.server_address
server_thread = threading.Thread( target= server.serve_forever)
server_thread.daemon = False
server_thread.start()
while True:
try:
time.sleep(1)
except:
break
server.shutdown()
server.server_close()
Ответы (1 шт):
Автор решения: eri
→ Ссылка
по сети передается ещё и нажатие enter. надо почистить строку.
if username.strip() != "tzk":
п.с. вычитывание tcp по .recv(1024) не является надежным. для хорошей программы вам нужно разработать протокол
