72 lines
2.2 KiB
Python
72 lines
2.2 KiB
Python
# © Crown-owned copyright 2024, Defence Science and Technology Laboratory UK
|
|
|
|
from enum import IntEnum
|
|
from typing import Dict, Optional
|
|
|
|
from primaite.interface.request import RequestResponse
|
|
from primaite.simulator.network.protocols.packet import DataPacket
|
|
|
|
# TODO: Elaborate / Confirm / Validate - See 2709.
|
|
# Placeholder implementation for Terminal Class implementation.
|
|
|
|
|
|
class SSHTransportMessage(IntEnum):
|
|
"""
|
|
Enum list of Transport layer messages that can be handled by the simulation.
|
|
|
|
Each msg value is equivalent to the real-world.
|
|
"""
|
|
|
|
SSH_MSG_USERAUTH_REQUEST = 50
|
|
"""Requests User Authentication."""
|
|
|
|
SSH_MSG_USERAUTH_FAILURE = 51
|
|
"""Indicates User Authentication failed."""
|
|
|
|
SSH_MSG_USERAUTH_SUCCESS = 52
|
|
"""Indicates User Authentication failed was successful."""
|
|
|
|
SSH_MSG_SERVICE_REQUEST = 24
|
|
"""Requests a service - such as executing a command."""
|
|
|
|
# These two msgs are invented for primAITE however are modelled on reality
|
|
|
|
SSH_MSG_SERVICE_FAILED = 25
|
|
"""Indicates that the requested service failed."""
|
|
|
|
SSH_MSG_SERVICE_SUCCESS = 26
|
|
"""Indicates that the requested service was successful."""
|
|
|
|
|
|
class SSHConnectionMessage(IntEnum):
|
|
"""Int Enum list of all SSH's connection protocol messages that can be handled by the simulation."""
|
|
|
|
SSH_MSG_CHANNEL_OPEN = 80
|
|
"""Requests an open channel - Used in combination with SSH_MSG_USERAUTH_REQUEST."""
|
|
|
|
SSH_MSG_CHANNEL_OPEN_CONFIRMATION = 81
|
|
"""Confirms an open channel."""
|
|
|
|
SSH_MSG_CHANNEL_OPEN_FAILED = 82
|
|
"""Indicates that channel opening failure."""
|
|
|
|
SSH_MSG_CHANNEL_DATA = 84
|
|
"""Indicates that data is being sent through the channel."""
|
|
|
|
SSH_MSG_CHANNEL_CLOSE = 87
|
|
"""Closes the channel."""
|
|
|
|
|
|
class SSHPacket(DataPacket):
|
|
"""Represents an SSHPacket."""
|
|
|
|
transport_message: SSHTransportMessage
|
|
|
|
connection_message: SSHConnectionMessage
|
|
|
|
ssh_command: Optional[any] = None # This is the request string
|
|
|
|
ssh_output: Optional[RequestResponse] = None # The Request Manager's returned RequestResponse
|
|
|
|
user_account: Optional[Dict] = None # The user account we will use to login if we do not have a current connection.
|