Telnet для сетевых инженеров. Автоматизация и обход логина
Автор: 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())