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