Add SSH scanning + Guest Mode credential testing
This commit is contained in:
43
scanner.py
43
scanner.py
@@ -14,10 +14,16 @@ logger = logging.getLogger("FastRDP-NG")
|
||||
# RDP ports to scan
|
||||
RDP_PORTS = [3389, 3390, 3391]
|
||||
|
||||
# SSH port
|
||||
SSH_PORT = 22
|
||||
|
||||
# First 3 bytes of an RDP Negotiation Response (T.125)
|
||||
# Actual RDP servers respond with 0x03 (TPKT version 3)
|
||||
RDP_BANNER_SIG = b'\x03\x00'
|
||||
|
||||
# SSH banner prefix
|
||||
SSH_BANNER_SIG = b'SSH-'
|
||||
|
||||
|
||||
async def check_rdp_port(
|
||||
ip: str,
|
||||
@@ -88,6 +94,43 @@ async def check_rdp_with_banner(
|
||||
return (ip, port, False)
|
||||
|
||||
|
||||
async def check_ssh_banner(
|
||||
ip: str,
|
||||
port: int,
|
||||
connect_timeout: float = 2.0,
|
||||
banner_timeout: float = 1.0,
|
||||
proxy_manager=None
|
||||
) -> Tuple[str, int, bool]:
|
||||
"""
|
||||
Connect + read SSH banner to confirm it's SSH.
|
||||
SSH banners look like: SSH-2.0-OpenSSH_8.9p1 ...
|
||||
"""
|
||||
open_conn = asyncio.open_connection
|
||||
if proxy_manager and proxy_manager.enabled:
|
||||
open_conn = proxy_manager.open_connection
|
||||
|
||||
try:
|
||||
reader, writer = await asyncio.wait_for(
|
||||
open_conn(ip, port),
|
||||
timeout=connect_timeout
|
||||
)
|
||||
try:
|
||||
data = await asyncio.wait_for(
|
||||
reader.read(8),
|
||||
timeout=banner_timeout
|
||||
)
|
||||
is_ssh = data.startswith(SSH_BANNER_SIG)
|
||||
return (ip, port, is_ssh)
|
||||
except (asyncio.TimeoutError, ConnectionError, OSError):
|
||||
return (ip, port, False)
|
||||
finally:
|
||||
writer.close()
|
||||
await writer.wait_closed()
|
||||
except (asyncio.TimeoutError, ConnectionRefusedError,
|
||||
OSError, ConnectionError):
|
||||
return (ip, port, False)
|
||||
|
||||
|
||||
async def scan_ips(
|
||||
ips: List[str],
|
||||
ports: List[int] = None, # type: ignore
|
||||
|
||||
Reference in New Issue
Block a user