Telnet для сетевых инженеров. Автоматизация и обход логина

Опубликовано 14 авг. 2025 г.

Автор: yenzedm

Делал это для автоматического выполнения разных команд на сетевом оборудовании и парсинга по разным критериям.

ЧИТАТЬ ПЕРВЫМ В ТЕЛЕГРАМ

Подключение к telnet c аутентификацией

def respond_to_telnet_commands(sock, data):
    """Отвечает на IAC-команды, отправляя WONT на все DO и DONT на все WILL."""
    i = 0
    while i < len(data):
        if data[i] == 0xff and i + 2 < len(data):  # IAC
            command, option = data[i + 1], data[i + 2]
            if command == 0xfd:  # DO
                sock.send(bytes([0xff, 0xfc, option]))  # WONT
            elif command == 0xfb:  # WILL
                sock.send(bytes([0xff, 0xfe, option]))  # DONT
            i += 3
        else:
            i += 1

respond_to_telnet_commands - функция понадобится только если в ответе от сервера получаем такое b"\xff\xfb%\xff\xfb&\xff\xfd\x18\xff\xfd \xff\xfd#\xff\xfd'\xff\xfd$".

Если же в конце этой кишки будет login то всё ок можно сразу отправлять логин sock.send(b'login\r\n')

Подключение через ipython:

import socket
sock = socket.socket()
sock.connect(('192.168.1.100', 5000))
data = sock.recv(1024)
print(data)
respond_to_telnet_commands(sock, data)
data = sock.recv(1024)
print(data)
respond_to_telnet_commands(sock, data)
data = sock.recv(1024)
print(data)
sock.send(b'<login>\r\n')
data = sock.recv(1024)
print(data)
sock.send(b'<pass>\r\n')
data = sock.recv(1024)
print(data)
sock.send(b'<command>\r\n')
data = sock.recv(1024)
print(data.decode())

Подключение к telnet без аутентификации

В /etc/inetd.conf добавить:

5000 stream tcp nowait root /usr/local/bin/telnet_noauth 

telnet_noauth - 5000 можно заменить на любой порт или написать просто telnet будет использоваться для подключения порт 23

<service_name>: имя службы (например, telnet), соответствует записи в /etc/services.

<socket_type>: обычно stream (для TCP) или dgram (для UDP).

<protocol>: протокол, например, tcp или udp.

<wait/nowait>: wait (ждёт завершения процесса) или nowait (многопоточный).

<user>: пользователь, от имени которого запускается служба (например, root).

<server_program>: путь к исполняемому файлу службы (например, /usr/sbin/in.telnetd).

<server_args>: аргументы для программы (обычно имя программы).

Добавить скрипт telnet_noauth с содержимым:

#!/bin/bash                                                           

/bin/bash -i

Дать права на исполнения:

chmod +x /usr/local/bin/**telnet_noauth**

Подключение через ipython:

import socket
sock = socket.socket()
sock.connect(('192.168.1.100', 5000))
data = sock.recv(1024)
print(data)
sock.send(b'<command>\r\n')
data = sock.recv(1024)
print(data.decode())

Комментарии