scm-harmonic-cmts-admin/cmts_api_env/lib/python3.12/site-packages/netmiko/telnet_proxy.py

62 lines
1.7 KiB
Python

from typing import Dict, Any, Optional
import socket
from netmiko._telnetlib import telnetlib
try:
import socks
SOCKS_SUPPORTED = True
except ModuleNotFoundError:
SOCKS_SUPPORTED = False
class Telnet(telnetlib.Telnet):
def __init__(
self,
host: Optional[str] = None,
port: int = 0,
timeout: float = socket._GLOBAL_DEFAULT_TIMEOUT, # type: ignore
proxy_dict: Optional[Dict[str, Any]] = None,
) -> None:
self.proxy_dict = proxy_dict
super().__init__(host=host, port=port, timeout=timeout) # type: ignore
def open(
self,
host: str,
port: int = 0,
timeout: float = socket._GLOBAL_DEFAULT_TIMEOUT, # type: ignore
) -> None:
"""
Connect to a host.
The optional second argument is the port number, which
defaults to the standard telnet port (23).
Don't try to reopen an already connected instance.
proxy_dict = {
'proxy_type': socks.SOCKS5,
'proxy_addr': hostname,
'proxy_port': port,
'proxy_username': username,
'proxy_password': password
}
"""
self.eof = 0
if not port:
port = telnetlib.TELNET_PORT
self.host = host
self.port = port
self.timeout = timeout
if SOCKS_SUPPORTED:
self.sock = socks.create_connection(
(host, port), timeout, **self.proxy_dict
)
else:
msg = """
In order to use the telnet socks proxy, you must 'pip install pysocks'. Note, pysocks is
unmaintained (so use at your own risk).
"""
raise ModuleNotFoundError(msg)