Ich möchte, dass Neulinge den Betrieb von Servern und NW-Geräten mit Telnet erleben, aber es ist schwierig, einen Load Balancer usw. vorzubereiten, abgesehen davon, dass nur Linux auf einer VM ausgeführt wird. Aus diesem Grund habe ich einen Übungsserver geschrieben, der eine Telnet-Verbindung mit dem Python-Socket-Server simuliert.
Schreiben Sie nach Eingabe eines geeigneten Befehls eine if-Anweisung, die entsprechend ausgegeben werden soll, und stellen Sie eine Verbindung mit einem Terminal wie TeraTerm her.
if command == "exit":
sys.exit()
elif command == "ls":
self.write("bin etc proc usr dev home\r\n")
Da das Telnet-Protokoll ordnungsgemäß gesprochen wird, kann es in dem vor Ort verwendeten Terminal und auch als Labortabelle für Makros verwendet werden.
server.py
import sys
import socketserver
class MyTCPHandler(socketserver.BaseRequestHandler):
prompt = "$ "
def command(self,command):
print(command)
if command == "exit":
sys.exit()
elif command == "ls":
self.write("bin etc proc usr dev home\r\n")
elif command == "ls -l":
self.write("drwxr-xr-x+ 1 t.uehara Domain Benutzer 0 19. März 11:14 bin\r\n")
self.write("drwxr-xr-x+ 1 t.uehara Domain Benutzer 0 19. März 11:14 etc\r\n")
self.write("drwxr-xr-x+ 1 t.uehara Domain Benutzer 0 19. März 11:14 proc\r\n")
self.write("drwxr-xr-x+ 1 t.uehara Domain Benutzer 0 19. März 11:14 usr\r\n")
self.write("drwxr-xr-x+ 1 t.uehara Domain Benutzer 0 19. März 11:14 dev\r\n")
self.write("drwxr-xr-x+ 1 t.uehara Domain Benutzer 0 19. März 11:14 home\r\n")
def write(self,str):
self.request.sendall(bytes(str,"UTF-8"))
def handle(self):
buff = []
while True:
self.data = self.request.recv(1024)
if self.data == bytes("\r\x00","UTF-8"): #Neue Zeile
self.write("\r\n")
self.command("".join(buff))
del buff[:]
self.write(self.prompt)
elif self.data == bytes("\x03","UTF-8"): # Ctrl+C
sys.exit()
else:
self.request.sendall(self.data)
try:
buff.append(self.data.decode("UTF-8"))
except UnicodeDecodeError:
print(self.data)
if __name__ == "__main__":
HOST, PORT = "localhost", 23
server = socketserver.TCPServer((HOST, PORT), MyTCPHandler)
server.serve_forever()
Übrigens möchte ich den Befehl ursprünglich interpretieren, wenn ich eine Verbindung zu Telnet herstelle, aber jetzt gebe ich den Papagei zurück. Wenn Sie Ihre eigenen erweitern möchten, ist die folgende Website hilfreich.
http://www5e.biglobe.ne.jp/aji/3min/55.html
Befehlsverlauf und Tab-Vervollständigung sind ebenfalls nicht möglich. Dieser Übungstisch ist nicht für diejenigen geeignet, die sagen, dass unser Arbeitsplatz Zsh ist. Aber ich wollte heimlich die SSH-Version machen.
Recommended Posts