[PYTHON] Pratique pour former les nouveaux arrivants? J'ai écrit un serveur d'entraînement Telnet

Je veux que les nouveaux venus expérimentent le fonctionnement des serveurs et des périphériques NW avec Telnet, mais il est difficile de préparer un équilibreur de charge, etc., à part simplement exécuter Linux sur VM. C'est pourquoi j'ai écrit un serveur d'entraînement qui simule une connexion Telnet à l'aide du serveur socket de Python.

Après avoir entré une commande appropriée, écrivez une instruction if à produire en fonction de celle-ci et connectez-vous à un terminal tel que TeraTerm.

if command == "exit":
  sys.exit()

elif command == "ls":
  self.write("bin     etc     proc    usr     dev     home\r\n")

Comme il parle correctement le protocole Telnet, il peut être utilisé dans le terminal utilisé sur le terrain, et il peut également être utilisé comme table de laboratoire pour les macros.

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.Utilisateurs du domaine uehara 0 mars 19 11:14 bin\r\n")
            self.write("drwxr-xr-x+ 1 t.Utilisateurs du domaine uehara 0 mars 19 11:14 etc\r\n")
            self.write("drwxr-xr-x+ 1 t.Utilisateurs du domaine uehara 0 mars 19 11:14 proc\r\n")
            self.write("drwxr-xr-x+ 1 t.Utilisateurs du domaine uehara 0 mars 19 11:14 usr\r\n")
            self.write("drwxr-xr-x+ 1 t.Utilisateurs du domaine uehara 0 mars 19 11:14 dev\r\n")
            self.write("drwxr-xr-x+ 1 t.Utilisateurs du domaine uehara 0 mars 19 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"): #nouvelle ligne
                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()

Au fait, à l'origine, je voudrais interpréter la commande lors de la connexion à Telnet, mais pour l'instant je retourne le perroquet. Si vous souhaitez développer le vôtre, le site suivant vous sera utile.

http://www5e.biglobe.ne.jp/aji/3min/55.html

L'historique des commandes et l'achèvement de l'onglet sont également impossibles. Ce tableau de pratique ne convient pas à ceux qui disent que notre lieu de travail est Zsh. Mais je voulais secrètement faire la version SSH.

Recommended Posts

Pratique pour former les nouveaux arrivants? J'ai écrit un serveur d'entraînement Telnet
J'ai écrit un programme de démonstration pour la transformation linéaire d'une matrice
Création d'un outil CLI client / serveur WebSocket (comme WebSocket version netcat)
Écrivain AtCoder J'ai écrit un script qui regroupe les concours pour chaque écrivain
J'ai créé un docset de tableau de bord pour Holoviews
J'ai écrit un test unitaire pour différentes langues
J'ai écrit le code pour l'échantillonnage Gibbs
J'ai fait une bibliothèque pour l'assurance actuarielle
J'ai écrit un graphe comme R glmnet en Python pour une modélisation clairsemée avec Lasso