Files
jumpserver/apps/settings/tools/telnet.py
wangruidong d48eb40472 perf: Upgrade python version and dependency libraries
fix: Update aliyun-python-sdk-core-v3 to version 2.13.36 and remove telnetlib3 dependency

perf: Implement AsyncLocal for asynchronous context storage and update signal handler

fix: api docs access error

fix: ticket flow api docs access error

perf: stash ansible update version

perf: update pynacl to version 1.6.2

perf: update telnet version

perf: update docker-base

perf: update ci
2026-04-23 09:56:06 +08:00

61 lines
2.1 KiB
Python

# -*- coding: utf-8 -*-
#
import asyncio
import socket
import telnetlib3
from settings.utils import generate_ips
PROMPT_REGEX = r'[\<|\[](.*)[\>|\]]'
async def telnet(dest_addr, port_number=23, timeout=10):
loop = asyncio.get_running_loop()
try:
connection = await loop.run_in_executor(None, telnetlib3.Telnet, dest_addr, port_number, timeout)
except asyncio.TimeoutError:
return False, 'Timeout'
except (ConnectionRefusedError, socket.timeout, socket.gaierror) as e:
return False, str(e)
expected_regexes = [bytes(PROMPT_REGEX, encoding='ascii')]
__, __, output = connection.expect(expected_regexes, timeout=3)
return True, output.decode('utf-8', 'ignore')
async def verbose_telnet(dest_ips, dest_port=23, timeout=10, display=None):
if not display:
return
result = {}
ips = generate_ips(dest_ips)
await display(f'Total valid address: {len(ips)}\r\n')
for dest_ip in ips:
await display(f'Trying ({dest_ip}:{dest_port})')
try:
is_connective, resp = await telnet(dest_ip, dest_port, timeout)
if is_connective:
result[dest_ip] = 'ok'
msg = f'Connected to {dest_ip} {dest_port} {resp}.\r\n' \
f'Connection closed by foreign host.'
else:
result[dest_ip] = 'failed'
msg = f'Unable to connect to remote host\r\n' \
f'Reason: {resp}'
except Exception as e:
msg = 'Error: %s' % e
await display(f'{msg}\r\n')
await display(f'----- Telnet statistics -----')
for k, v in result.items():
await display(f'{k}: {v}')
if __name__ == "__main__":
print(verbose_telnet(dest_addr='1.1.1.1', port_number=2222))
print(verbose_telnet(dest_addr='baidu.com', port_number=80))
print(verbose_telnet(dest_addr='baidu.com', port_number=8080))
print(verbose_telnet(dest_addr='192.168.4.1', port_number=2222))
print(verbose_telnet(dest_addr='192.168.4.1', port_number=2223))
print(verbose_telnet(dest_addr='ssssss', port_number=-1))