pub struct TaskResponse {Show 21 fields
pub task_id: Uuid,
pub completed: Option<bool>,
pub status: Option<String>,
pub user_output: Option<String>,
pub process_response: Option<Value>,
pub download: Option<TaskDownload>,
pub upload: Option<TaskUpload>,
pub file_browser: Option<FileBrowserEntry>,
pub credentials: Vec<Credential>,
pub artifacts: Vec<Artifact>,
pub processes: Vec<ProcessEntry>,
pub commands: Vec<CommandAction>,
pub keylogs: Vec<KeylogEntry>,
pub tokens: Vec<TokenEntry>,
pub callback_tokens: Vec<CallbackToken>,
pub removed_files: Vec<RemovedFileInfo>,
pub alerts: Vec<AlertMessage>,
pub edges: Vec<EdgeMessage>,
pub socks: Vec<SocksMessage>,
pub rpfwd: Vec<ReversePortForwardMessage>,
pub interactive: Vec<InteractiveMessage>,
}Expand description
Task output sent by the agent. All fields are optional except task_id so
an agent can send back only what it needs (user output, file chunk, SOCKS
data, etc.).
Fields§
§task_id: Uuid§completed: Option<bool>§status: Option<String>§user_output: Option<String>§process_response: Option<Value>§download: Option<TaskDownload>§upload: Option<TaskUpload>§file_browser: Option<FileBrowserEntry>§credentials: Vec<Credential>§artifacts: Vec<Artifact>§processes: Vec<ProcessEntry>§commands: Vec<CommandAction>§keylogs: Vec<KeylogEntry>§tokens: Vec<TokenEntry>§callback_tokens: Vec<CallbackToken>§removed_files: Vec<RemovedFileInfo>§alerts: Vec<AlertMessage>§edges: Vec<EdgeMessage>§socks: Vec<SocksMessage>§rpfwd: Vec<ReversePortForwardMessage>§interactive: Vec<InteractiveMessage>Implementations§
Source§impl TaskResponse
impl TaskResponse
Sourcepub fn completed(task_id: Uuid, user_output: &str) -> Self
pub fn completed(task_id: Uuid, user_output: &str) -> Self
Examples found in repository?
examples/mythic_facade.rs (line 118)
52fn main() {
53 let payload_uuid = Uuid::parse_str("f0f0f0f0-1111-2222-3333-444444444444").unwrap();
54
55 // ── Plaintext checkin ─────────────────────────────────
56 {
57 let c2 = HttpC2 { key_b64: None };
58 let agent = MythicAgent::easy_checkin(
59 payload_uuid,
60 &c2,
61 vec!["10.0.0.1".into()],
62 Some("linux".into()),
63 Some("root".into()),
64 Some("web01".into()),
65 Some(1337),
66 Some("x86_64".into()),
67 None, None, None, None, None, None,
68 )
69 .unwrap();
70 println!("Plaintext callback UUID: {}", agent.callback_uuid());
71 }
72
73 // ── Static-key checkin ────────────────────────────────
74 {
75 let key = Aes256HmacCrypto::new([0xAB; 32]).key_b64();
76 let c2 = HttpC2 { key_b64: Some(key) };
77 let agent = MythicAgent::easy_checkin(
78 payload_uuid,
79 &c2,
80 vec!["192.168.1.100".into()],
81 Some("windows".into()),
82 Some("admin".into()),
83 Some("DESKTOP-XYZ".into()),
84 Some(2048),
85 Some("x86_64".into()),
86 None, None, None, None, None, None,
87 )
88 .unwrap();
89 println!("Static-key callback UUID: {}", agent.callback_uuid());
90 }
91
92 // ── Full lifecycle: get_tasking → post_response ───────
93 {
94 let c2 = HttpC2 { key_b64: None };
95
96 // 1. Checkin
97 let agent = MythicAgent::easy_checkin(
98 payload_uuid,
99 &c2,
100 vec!["10.0.0.2".into()],
101 Some("linux".into()),
102 Some("operator".into()),
103 Some("implant01".into()),
104 Some(9999),
105 Some("aarch64".into()),
106 None, None, None, None, None, None,
107 )
108 .unwrap();
109
110 // 2. Poll for tasks
111 match agent.get_tasking(1, &c2) {
112 Ok(resp) => {
113 for task in &resp.tasks {
114 println!("Received task {}: {}", task.id, task.command);
115
116 // 3. Execute and respond
117 let _ = agent.post_response(
118 vec![TaskResponse::completed(task.id, "task executed successfully")],
119 &c2,
120 );
121 }
122 }
123 Err(e) => eprintln!("get_tasking failed: {e}"),
124 }
125 }
126
127 println!("All demo scenarios complete.");
128}pub fn failed(task_id: Uuid, error: &str) -> Self
Trait Implementations§
Source§impl Clone for TaskResponse
impl Clone for TaskResponse
Source§fn clone(&self) -> TaskResponse
fn clone(&self) -> TaskResponse
Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source. Read moreSource§impl Debug for TaskResponse
impl Debug for TaskResponse
Source§impl Default for TaskResponse
impl Default for TaskResponse
Source§fn default() -> TaskResponse
fn default() -> TaskResponse
Returns the “default value” for a type. Read more
Source§impl<'de> Deserialize<'de> for TaskResponse
impl<'de> Deserialize<'de> for TaskResponse
Source§fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Deserialize this value from the given Serde deserializer. Read more
Source§impl PartialEq for TaskResponse
impl PartialEq for TaskResponse
Source§fn eq(&self, other: &TaskResponse) -> bool
fn eq(&self, other: &TaskResponse) -> bool
Tests for
self and other values to be equal, and is used by ==.Source§impl Serialize for TaskResponse
impl Serialize for TaskResponse
impl StructuralPartialEq for TaskResponse
Auto Trait Implementations§
impl Freeze for TaskResponse
impl RefUnwindSafe for TaskResponse
impl Send for TaskResponse
impl Sync for TaskResponse
impl Unpin for TaskResponse
impl UnsafeUnpin for TaskResponse
impl UnwindSafe for TaskResponse
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more