[PYTHON] Praktisch für die Ausbildung von Neulingen? Ich habe einen Telnet-Übungsserver geschrieben

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

Praktisch für die Ausbildung von Neulingen? Ich habe einen Telnet-Übungsserver geschrieben
Ich habe ein Demo-Programm zur linearen Transformation einer Matrix geschrieben
Erstelltes WebSocket Client / Server-CLI-Tool (wie WebSocket Version Netcat)
AtCoder-Autor Ich habe ein Skript geschrieben, das Wettbewerbe für jeden Autor zusammenfasst
Ich habe ein Dash-Docset für Holoviews erstellt
Ich habe einen Unit-Test für verschiedene Sprachen geschrieben
Ich habe den Code für Gibbs Sampling geschrieben
Ich habe eine Bibliothek für versicherungsmathematische Versicherungen erstellt
Ich habe ein Diagramm wie R glmnet in Python für die spärliche Modellierung mit Lasso geschrieben