Files
metasploit-gs/api/Msf/MCP/Metasploit/MessagePackClient.html
T
jenkins-metasploit c3f5bd3de2 Reboot gh-pages
2026-05-08 17:08:43 +00:00

1687 lines
47 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>
Class: Msf::MCP::Metasploit::MessagePackClient
&mdash; Documentation by YARD 0.9.37
</title>
<link rel="stylesheet" href="../../../css/style.css" type="text/css" />
<link rel="stylesheet" href="../../../css/common.css" type="text/css" />
<script type="text/javascript">
pathId = "Msf::MCP::Metasploit::MessagePackClient";
relpath = '../../../';
</script>
<script type="text/javascript" charset="utf-8" src="../../../js/jquery.js"></script>
<script type="text/javascript" charset="utf-8" src="../../../js/app.js"></script>
</head>
<body>
<div class="nav_wrap">
<iframe id="nav" src="../../../class_list.html?1"></iframe>
<div id="resizer"></div>
</div>
<div id="main" tabindex="-1">
<div id="header">
<div id="menu">
<a href="../../../_index.html">Index (M)</a> &raquo;
<span class='title'><span class='object_link'><a href="../../../Msf.html" title="Msf (module)">Msf</a></span></span> &raquo; <span class='title'><span class='object_link'><a href="../../MCP.html" title="Msf::MCP (module)">MCP</a></span></span> &raquo; <span class='title'><span class='object_link'><a href="../Metasploit.html" title="Msf::MCP::Metasploit (module)">Metasploit</a></span></span>
&raquo;
<span class="title">MessagePackClient</span>
</div>
<div id="search">
<a class="full_list_link" id="class_list_link"
href="../../../class_list.html">
<svg width="24" height="24">
<rect x="0" y="4" width="24" height="4" rx="1" ry="1"></rect>
<rect x="0" y="12" width="24" height="4" rx="1" ry="1"></rect>
<rect x="0" y="20" width="24" height="4" rx="1" ry="1"></rect>
</svg>
</a>
</div>
<div class="clear"></div>
</div>
<div id="content"><h1>Class: Msf::MCP::Metasploit::MessagePackClient
</h1>
<div class="box_info">
<dl>
<dt>Inherits:</dt>
<dd>
<span class="inheritName">Object</span>
<ul class="fullTree">
<li>Object</li>
<li class="next">Msf::MCP::Metasploit::MessagePackClient</li>
</ul>
<a href="#" class="inheritanceTree">show all</a>
</dd>
</dl>
<dl>
<dt>Defined in:</dt>
<dd>lib/msf/core/mcp/metasploit/messagepack_client.rb</dd>
</dl>
</div>
<h2>Overview</h2><div class="docstring">
<div class="discussion">
<p>MessagePack RPC client for Metasploit Framework Implements authentication and API calls using MessagePack serialization</p>
</div>
</div>
<div class="tags">
</div>
<h2>
Constant Summary
<small><a href="#" class="constants_summary_toggle">collapse</a></small>
</h2>
<dl class="constants">
<dt id="DEFAULT_ENDPOINT-constant" class="">DEFAULT_ENDPOINT =
</dt>
<dd><pre class="code"><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>/api/</span><span class='tstring_end'>&#39;</span></span></pre></dd>
</dl>
<h2>
Instance Method Summary
<small><a href="#" class="summary_toggle">collapse</a></small>
</h2>
<ul class="summary">
<li class="public ">
<span class="summary_signature">
<a href="#authenticate-instance_method" title="#authenticate (instance method)">#<strong>authenticate</strong>(user, password) &#x21d2; String </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>Authenticate with Metasploit RPC.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#call_api-instance_method" title="#call_api (instance method)">#<strong>call_api</strong>(method, args = []) &#x21d2; Hash, Array </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>Call Metasploit RPC API method.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#db_creds-instance_method" title="#db_creds (instance method)">#<strong>db_creds</strong>(options = {}) &#x21d2; Hash </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>Get credentials from database.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#db_hosts-instance_method" title="#db_hosts (instance method)">#<strong>db_hosts</strong>(options = {}) &#x21d2; Hash </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>Get hosts from database.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#db_loot-instance_method" title="#db_loot (instance method)">#<strong>db_loot</strong>(options = {}) &#x21d2; Hash </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>Get loot from database.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#db_notes-instance_method" title="#db_notes (instance method)">#<strong>db_notes</strong>(options = {}) &#x21d2; Hash </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>Get notes from database.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#db_services-instance_method" title="#db_services (instance method)">#<strong>db_services</strong>(options = {}) &#x21d2; Hash </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>Get services from database.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#db_vulns-instance_method" title="#db_vulns (instance method)">#<strong>db_vulns</strong>(options = {}) &#x21d2; Hash </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>Get vulnerabilities from database.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#initialize-instance_method" title="#initialize (instance method)">#<strong>initialize</strong>(host:, port:, endpoint: DEFAULT_ENDPOINT, ssl: true) &#x21d2; MessagePackClient </a>
</span>
<span class="note title constructor">constructor</span>
<span class="summary_desc"><div class='inline'>
<p>Initialize MessagePack client.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#module_info-instance_method" title="#module_info (instance method)">#<strong>module_info</strong>(type, name) &#x21d2; Hash </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>Get module information.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#search_modules-instance_method" title="#search_modules (instance method)">#<strong>search_modules</strong>(query) &#x21d2; Array&lt;Hash&gt; </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>Search for Metasploit modules.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#shutdown-instance_method" title="#shutdown (instance method)">#<strong>shutdown</strong> &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>Shutdown client and cleanup.</p>
</div></span>
</li>
</ul>
<div id="constructor_details" class="method_details_list">
<h2>Constructor Details</h2>
<div class="method_details first">
<h3 class="signature first" id="initialize-instance_method">
#<strong>initialize</strong>(host:, port:, endpoint: DEFAULT_ENDPOINT, ssl: true) &#x21d2; <tt><span class='object_link'><a href="" title="Msf::MCP::Metasploit::MessagePackClient (class)">MessagePackClient</a></span></tt>
</h3><div class="docstring">
<div class="discussion">
<p>Initialize MessagePack client</p>
</div>
</div>
<div class="tags">
<p class="tag_title">Parameters:</p>
<ul class="param">
<li>
<span class='name'>host</span>
<span class='type'>(<tt>String</tt>)</span>
&mdash;
<div class='inline'>
<p>Metasploit RPC host</p>
</div>
</li>
<li>
<span class='name'>port</span>
<span class='type'>(<tt>Integer</tt>)</span>
&mdash;
<div class='inline'>
<p>Metasploit RPC port</p>
</div>
</li>
<li>
<span class='name'>endpoint</span>
<span class='type'>(<tt>String</tt>)</span>
<em class="default">(defaults to: <tt>DEFAULT_ENDPOINT</tt>)</em>
&mdash;
<div class='inline'>
<p>API endpoint path (default: DEFAULT_ENDPOINT)</p>
</div>
</li>
<li>
<span class='name'>ssl</span>
<span class='type'>(<tt>Boolean</tt>)</span>
<em class="default">(defaults to: <tt>true</tt>)</em>
&mdash;
<div class='inline'>
<p>Use SSL (default: true)</p>
</div>
</li>
</ul>
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
18
19
20
21
22
23
24
25
26
27
28
29</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/mcp/metasploit/messagepack_client.rb', line 18</span>
<span class='kw'>def</span> <span class='id identifier rubyid_initialize'>initialize</span><span class='lparen'>(</span><span class='label'>host:</span><span class='comma'>,</span> <span class='label'>port:</span><span class='comma'>,</span> <span class='label'>endpoint:</span> <span class='const'><span class='object_link'><a href="#DEFAULT_ENDPOINT-constant" title="Msf::MCP::Metasploit::MessagePackClient::DEFAULT_ENDPOINT (constant)">DEFAULT_ENDPOINT</a></span></span><span class='comma'>,</span> <span class='label'>ssl:</span> <span class='kw'>true</span><span class='rparen'>)</span>
<span class='ivar'>@host</span> <span class='op'>=</span> <span class='id identifier rubyid_host'>host</span>
<span class='ivar'>@port</span> <span class='op'>=</span> <span class='id identifier rubyid_port'>port</span>
<span class='ivar'>@endpoint</span> <span class='op'>=</span> <span class='id identifier rubyid_endpoint'>endpoint</span>
<span class='ivar'>@token</span> <span class='op'>=</span> <span class='kw'>nil</span>
<span class='ivar'>@http</span> <span class='op'>=</span> <span class='kw'>nil</span>
<span class='ivar'>@user</span> <span class='op'>=</span> <span class='kw'>nil</span>
<span class='ivar'>@password</span> <span class='op'>=</span> <span class='kw'>nil</span>
<span class='ivar'>@retry_count</span> <span class='op'>=</span> <span class='int'>0</span>
<span class='ivar'>@max_retries</span> <span class='op'>=</span> <span class='int'>2</span>
<span class='ivar'>@ssl</span> <span class='op'>=</span> <span class='id identifier rubyid_ssl'>ssl</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
</div>
<div id="instance_method_details" class="method_details_list">
<h2>Instance Method Details</h2>
<div class="method_details first">
<h3 class="signature first" id="authenticate-instance_method">
#<strong>authenticate</strong>(user, password) &#x21d2; <tt>String</tt>
</h3><div class="docstring">
<div class="discussion">
<p>Authenticate with Metasploit RPC</p>
</div>
</div>
<div class="tags">
<p class="tag_title">Parameters:</p>
<ul class="param">
<li>
<span class='name'>user</span>
<span class='type'>(<tt>String</tt>)</span>
&mdash;
<div class='inline'>
<p>Username</p>
</div>
</li>
<li>
<span class='name'>password</span>
<span class='type'>(<tt>String</tt>)</span>
&mdash;
<div class='inline'>
<p>Password</p>
</div>
</li>
</ul>
<p class="tag_title">Returns:</p>
<ul class="return">
<li>
<span class='type'>(<tt>String</tt>)</span>
&mdash;
<div class='inline'>
<p>The resulting token if authentication successful</p>
</div>
</li>
</ul>
<p class="tag_title">Raises:</p>
<ul class="raise">
<li>
<span class='type'>(<tt><span class='object_link'><a href="AuthenticationError.html" title="Msf::MCP::Metasploit::AuthenticationError (class)">AuthenticationError</a></span></tt>)</span>
&mdash;
<div class='inline'>
<p>If authentication fails</p>
</div>
</li>
</ul>
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/mcp/metasploit/messagepack_client.rb', line 36</span>
<span class='kw'>def</span> <span class='id identifier rubyid_authenticate'>authenticate</span><span class='lparen'>(</span><span class='id identifier rubyid_user'>user</span><span class='comma'>,</span> <span class='id identifier rubyid_password'>password</span><span class='rparen'>)</span>
<span class='comment'># Store credentials for automatic re-authentication
</span> <span class='ivar'>@user</span> <span class='op'>=</span> <span class='id identifier rubyid_user'>user</span>
<span class='ivar'>@password</span> <span class='op'>=</span> <span class='id identifier rubyid_password'>password</span>
<span class='comment'># Send authentication request directly (bypass retry logic)
</span> <span class='id identifier rubyid_request_array'>request_array</span> <span class='op'>=</span> <span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>auth.login</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span> <span class='id identifier rubyid_user'>user</span><span class='comma'>,</span> <span class='id identifier rubyid_password'>password</span><span class='rbracket'>]</span>
<span class='id identifier rubyid_response'>response</span> <span class='op'>=</span> <span class='id identifier rubyid_send_request'>send_request</span><span class='lparen'>(</span><span class='id identifier rubyid_request_array'>request_array</span><span class='rparen'>)</span>
<span class='comment'># Real Metasploit API returns string keys
</span> <span class='kw'>if</span> <span class='id identifier rubyid_response'>response</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>result</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span> <span class='op'>==</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>success</span><span class='tstring_end'>&#39;</span></span> <span class='op'>&amp;&amp;</span> <span class='id identifier rubyid_response'>response</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>token</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span>
<span class='ivar'>@token</span> <span class='op'>=</span> <span class='id identifier rubyid_response'>response</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>token</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span>
<span class='kw'>elsif</span> <span class='id identifier rubyid_response'>response</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>error</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span>
<span class='id identifier rubyid_raise'>raise</span> <span class='const'><span class='object_link'><a href="AuthenticationError.html" title="Msf::MCP::Metasploit::AuthenticationError (class)">AuthenticationError</a></span></span><span class='comma'>,</span> <span class='id identifier rubyid_response'>response</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>error</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span>
<span class='kw'>else</span>
<span class='id identifier rubyid_raise'>raise</span> <span class='const'><span class='object_link'><a href="AuthenticationError.html" title="Msf::MCP::Metasploit::AuthenticationError (class)">AuthenticationError</a></span></span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>Authentication failed</span><span class='tstring_end'>&#39;</span></span>
<span class='kw'>end</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="call_api-instance_method">
#<strong>call_api</strong>(method, args = []) &#x21d2; <tt>Hash</tt>, <tt>Array</tt>
</h3><div class="docstring">
<div class="discussion">
<p>Call Metasploit RPC API method</p>
</div>
</div>
<div class="tags">
<p class="tag_title">Parameters:</p>
<ul class="param">
<li>
<span class='name'>method</span>
<span class='type'>(<tt>String</tt>)</span>
&mdash;
<div class='inline'>
<p>API method name (e.g., module.search)</p>
</div>
</li>
<li>
<span class='name'>args</span>
<span class='type'>(<tt>Array</tt>)</span>
<em class="default">(defaults to: <tt>[]</tt>)</em>
&mdash;
<div class='inline'>
<p>Arguments to pass to the method (must be an array)</p>
</div>
</li>
</ul>
<p class="tag_title">Returns:</p>
<ul class="return">
<li>
<span class='type'>(<tt>Hash</tt>, <tt>Array</tt>)</span>
&mdash;
<div class='inline'>
<p>API response</p>
</div>
</li>
</ul>
<p class="tag_title">Raises:</p>
<ul class="raise">
<li>
<span class='type'>(<tt><span class='object_link'><a href="AuthenticationError.html" title="Msf::MCP::Metasploit::AuthenticationError (class)">AuthenticationError</a></span></tt>)</span>
&mdash;
<div class='inline'>
<p>If authentication fails</p>
</div>
</li>
<li>
<span class='type'>(<tt><span class='object_link'><a href="APIError.html" title="Msf::MCP::Metasploit::APIError (class)">APIError</a></span></tt>)</span>
&mdash;
<div class='inline'>
<p>If API returns an error</p>
</div>
</li>
<li>
<span class='type'>(<tt><span class='object_link'><a href="ConnectionError.html" title="Msf::MCP::Metasploit::ConnectionError (class)">ConnectionError</a></span></tt>)</span>
&mdash;
<div class='inline'>
<p>If connection fails</p>
</div>
</li>
<li>
<span class='type'>(<tt>ArgumentError</tt>)</span>
&mdash;
<div class='inline'>
<p>If args is not an array</p>
</div>
</li>
</ul>
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/mcp/metasploit/messagepack_client.rb', line 63</span>
<span class='kw'>def</span> <span class='id identifier rubyid_call_api'>call_api</span><span class='lparen'>(</span><span class='id identifier rubyid_method'>method</span><span class='comma'>,</span> <span class='id identifier rubyid_args'>args</span> <span class='op'>=</span> <span class='lbracket'>[</span><span class='rbracket'>]</span><span class='rparen'>)</span>
<span class='id identifier rubyid_raise'>raise</span> <span class='const'>ArgumentError</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>args must be an Array, got </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_args'>args</span><span class='period'>.</span><span class='id identifier rubyid_class'>class</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span> <span class='kw'>unless</span> <span class='id identifier rubyid_args'>args</span><span class='period'>.</span><span class='id identifier rubyid_is_a?'>is_a?</span><span class='lparen'>(</span><span class='const'>Array</span><span class='rparen'>)</span>
<span class='kw'>begin</span>
<span class='id identifier rubyid_raise'>raise</span> <span class='const'><span class='object_link'><a href="AuthenticationError.html" title="Msf::MCP::Metasploit::AuthenticationError (class)">AuthenticationError</a></span></span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>Not authenticated</span><span class='tstring_end'>&#39;</span></span> <span class='kw'>unless</span> <span class='ivar'>@token</span>
<span class='comment'># Build request array: [method, token, *args]
</span> <span class='id identifier rubyid_request_array'>request_array</span> <span class='op'>=</span> <span class='lbracket'>[</span><span class='id identifier rubyid_method'>method</span><span class='comma'>,</span> <span class='ivar'>@token</span><span class='comma'>,</span> <span class='op'>*</span><span class='id identifier rubyid_args'>args</span><span class='rbracket'>]</span>
<span class='comment'># Send HTTP request
</span> <span class='id identifier rubyid_send_request'>send_request</span><span class='lparen'>(</span><span class='id identifier rubyid_request_array'>request_array</span><span class='rparen'>)</span>
<span class='kw'>rescue</span> <span class='const'><span class='object_link'><a href="AuthenticationError.html" title="Msf::MCP::Metasploit::AuthenticationError (class)">AuthenticationError</a></span></span> <span class='op'>=&gt;</span> <span class='id identifier rubyid_e'>e</span>
<span class='comment'># It is not possible to reauthenticate if we don&#39;t have credentials stored
</span> <span class='id identifier rubyid_raise'>raise</span> <span class='kw'>unless</span> <span class='ivar'>@user</span> <span class='op'>&amp;&amp;</span> <span class='ivar'>@password</span>
<span class='comment'># If reauthentication succeeded but the token is still invalid, we should not retry indefinitely
</span> <span class='id identifier rubyid_raise'>raise</span> <span class='kw'>unless</span> <span class='ivar'>@retry_count</span> <span class='op'>&lt;</span> <span class='ivar'>@max_retries</span>
<span class='ivar'>@retry_count</span> <span class='op'>+=</span> <span class='int'>1</span>
<span class='ivar'>@token</span> <span class='op'>=</span> <span class='kw'>nil</span>
<span class='kw'>begin</span>
<span class='id identifier rubyid_wlog'><span class='object_link'><a href="../../../top-level-namespace.html#wlog-instance_method" title="#wlog (method)">wlog</a></span></span><span class='lparen'>(</span><span class='lbrace'>{</span> <span class='label'>message:</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_method'>method</span><span class='embexpr_end'>}</span><span class='tstring_content'>&#39;: </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_e'>e</span><span class='period'>.</span><span class='id identifier rubyid_message'>message</span><span class='embexpr_end'>}</span><span class='tstring_content'>. Attempting to re-authenticate (</span><span class='embexpr_beg'>#{</span><span class='ivar'>@retry_count</span><span class='embexpr_end'>}</span><span class='tstring_content'>/</span><span class='embexpr_beg'>#{</span><span class='ivar'>@max_retries</span><span class='embexpr_end'>}</span><span class='tstring_content'>)</span><span class='tstring_end'>&quot;</span></span> <span class='rbrace'>}</span><span class='comma'>,</span>
<span class='const'><span class='object_link'><a href="../../MCP.html#LOG_SOURCE-constant" title="Msf::MCP::LOG_SOURCE (constant)">LOG_SOURCE</a></span></span><span class='comma'>,</span> <span class='const'><span class='object_link'><a href="../../MCP.html#LOG_WARN-constant" title="Msf::MCP::LOG_WARN (constant)">LOG_WARN</a></span></span><span class='rparen'>)</span>
<span class='id identifier rubyid_authenticate'>authenticate</span><span class='lparen'>(</span><span class='ivar'>@user</span><span class='comma'>,</span> <span class='ivar'>@password</span><span class='rparen'>)</span>
<span class='kw'>rescue</span> <span class='const'><span class='object_link'><a href="AuthenticationError.html" title="Msf::MCP::Metasploit::AuthenticationError (class)">AuthenticationError</a></span></span> <span class='op'>=&gt;</span> <span class='id identifier rubyid_auth_e'>auth_e</span>
<span class='id identifier rubyid_wlog'><span class='object_link'><a href="../../../top-level-namespace.html#wlog-instance_method" title="#wlog (method)">wlog</a></span></span><span class='lparen'>(</span><span class='lbrace'>{</span> <span class='label'>message:</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Re-authentication failed: </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_auth_e'>auth_e</span><span class='period'>.</span><span class='id identifier rubyid_message'>message</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span> <span class='rbrace'>}</span><span class='comma'>,</span>
<span class='const'><span class='object_link'><a href="../../MCP.html#LOG_SOURCE-constant" title="Msf::MCP::LOG_SOURCE (constant)">LOG_SOURCE</a></span></span><span class='comma'>,</span> <span class='const'><span class='object_link'><a href="../../MCP.html#LOG_WARN-constant" title="Msf::MCP::LOG_WARN (constant)">LOG_WARN</a></span></span><span class='rparen'>)</span>
<span class='kw'>if</span> <span class='ivar'>@retry_count</span> <span class='op'>&lt;</span> <span class='ivar'>@max_retries</span>
<span class='ivar'>@retry_count</span> <span class='op'>+=</span> <span class='int'>1</span>
<span class='ivar'>@token</span> <span class='op'>=</span> <span class='kw'>nil</span>
<span class='kw'>retry</span>
<span class='kw'>end</span>
<span class='id identifier rubyid_raise'>raise</span> <span class='const'><span class='object_link'><a href="AuthenticationError.html" title="Msf::MCP::Metasploit::AuthenticationError (class)">AuthenticationError</a></span></span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Unable to authenticate after </span><span class='embexpr_beg'>#{</span><span class='ivar'>@retry_count</span><span class='embexpr_end'>}</span><span class='tstring_content'> attempts: </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_auth_e'>auth_e</span><span class='period'>.</span><span class='id identifier rubyid_message'>message</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span>
<span class='kw'>end</span>
<span class='comment'># Retry the original request with new token
</span> <span class='kw'>retry</span>
<span class='kw'>end</span>
<span class='kw'>rescue</span> <span class='const'><span class='object_link'><a href="../../../Msf.html" title="Msf (module)">Msf</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="../../MCP.html" title="Msf::MCP (module)">MCP</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="../Error.html" title="Msf::MCP::Error (class)">Error</a></span></span> <span class='op'>=&gt;</span> <span class='id identifier rubyid_e'>e</span>
<span class='id identifier rubyid_elog'><span class='object_link'><a href="../../../top-level-namespace.html#elog-instance_method" title="#elog (method)">elog</a></span></span><span class='lparen'>(</span><span class='lbrace'>{</span> <span class='label'>message:</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>MessagePack API call error</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span> <span class='label'>context:</span> <span class='lbrace'>{</span> <span class='label'>error:</span> <span class='id identifier rubyid_e'>e</span><span class='period'>.</span><span class='id identifier rubyid_message'>message</span> <span class='rbrace'>}</span> <span class='rbrace'>}</span><span class='comma'>,</span>
<span class='const'><span class='object_link'><a href="../../MCP.html#LOG_SOURCE-constant" title="Msf::MCP::LOG_SOURCE (constant)">LOG_SOURCE</a></span></span><span class='comma'>,</span> <span class='const'><span class='object_link'><a href="../../MCP.html#LOG_ERROR-constant" title="Msf::MCP::LOG_ERROR (constant)">LOG_ERROR</a></span></span><span class='rparen'>)</span>
<span class='id identifier rubyid_raise'>raise</span>
<span class='kw'>ensure</span>
<span class='ivar'>@retry_count</span> <span class='op'>=</span> <span class='int'>0</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="db_creds-instance_method">
#<strong>db_creds</strong>(options = {}) &#x21d2; <tt>Hash</tt>
</h3><div class="docstring">
<div class="discussion">
<p>Get credentials from database</p>
</div>
</div>
<div class="tags">
<p class="tag_title">Parameters:</p>
<ul class="param">
<li>
<span class='name'>options</span>
<span class='type'>(<tt>Hash</tt>)</span>
<em class="default">(defaults to: <tt>{}</tt>)</em>
&mdash;
<div class='inline'>
<p>Query options</p>
</div>
</li>
</ul>
<p class="tag_title">Returns:</p>
<ul class="return">
<li>
<span class='type'>(<tt>Hash</tt>)</span>
&mdash;
<div class='inline'>
<p>Response with creds array</p>
</div>
</li>
</ul>
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
157
158
159</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/mcp/metasploit/messagepack_client.rb', line 157</span>
<span class='kw'>def</span> <span class='id identifier rubyid_db_creds'>db_creds</span><span class='lparen'>(</span><span class='id identifier rubyid_options'>options</span> <span class='op'>=</span> <span class='lbrace'>{</span><span class='rbrace'>}</span><span class='rparen'>)</span>
<span class='id identifier rubyid_call_api'>call_api</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>db.creds</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span> <span class='lbracket'>[</span><span class='id identifier rubyid_options'>options</span><span class='rbracket'>]</span><span class='rparen'>)</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="db_hosts-instance_method">
#<strong>db_hosts</strong>(options = {}) &#x21d2; <tt>Hash</tt>
</h3><div class="docstring">
<div class="discussion">
<p>Get hosts from database</p>
</div>
</div>
<div class="tags">
<p class="tag_title">Parameters:</p>
<ul class="param">
<li>
<span class='name'>options</span>
<span class='type'>(<tt>Hash</tt>)</span>
<em class="default">(defaults to: <tt>{}</tt>)</em>
&mdash;
<div class='inline'>
<p>Query options (workspace, limit, offset, etc.)</p>
</div>
</li>
</ul>
<p class="tag_title">Returns:</p>
<ul class="return">
<li>
<span class='type'>(<tt>Hash</tt>)</span>
&mdash;
<div class='inline'>
<p>Response with hosts array</p>
</div>
</li>
</ul>
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
129
130
131</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/mcp/metasploit/messagepack_client.rb', line 129</span>
<span class='kw'>def</span> <span class='id identifier rubyid_db_hosts'>db_hosts</span><span class='lparen'>(</span><span class='id identifier rubyid_options'>options</span> <span class='op'>=</span> <span class='lbrace'>{</span><span class='rbrace'>}</span><span class='rparen'>)</span>
<span class='id identifier rubyid_call_api'>call_api</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>db.hosts</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span> <span class='lbracket'>[</span><span class='id identifier rubyid_options'>options</span><span class='rbracket'>]</span><span class='rparen'>)</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="db_loot-instance_method">
#<strong>db_loot</strong>(options = {}) &#x21d2; <tt>Hash</tt>
</h3><div class="docstring">
<div class="discussion">
<p>Get loot from database</p>
</div>
</div>
<div class="tags">
<p class="tag_title">Parameters:</p>
<ul class="param">
<li>
<span class='name'>options</span>
<span class='type'>(<tt>Hash</tt>)</span>
<em class="default">(defaults to: <tt>{}</tt>)</em>
&mdash;
<div class='inline'>
<p>Query options</p>
</div>
</li>
</ul>
<p class="tag_title">Returns:</p>
<ul class="return">
<li>
<span class='type'>(<tt>Hash</tt>)</span>
&mdash;
<div class='inline'>
<p>Response with loots array</p>
</div>
</li>
</ul>
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
164
165
166</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/mcp/metasploit/messagepack_client.rb', line 164</span>
<span class='kw'>def</span> <span class='id identifier rubyid_db_loot'>db_loot</span><span class='lparen'>(</span><span class='id identifier rubyid_options'>options</span> <span class='op'>=</span> <span class='lbrace'>{</span><span class='rbrace'>}</span><span class='rparen'>)</span>
<span class='id identifier rubyid_call_api'>call_api</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>db.loots</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span> <span class='lbracket'>[</span><span class='id identifier rubyid_options'>options</span><span class='rbracket'>]</span><span class='rparen'>)</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="db_notes-instance_method">
#<strong>db_notes</strong>(options = {}) &#x21d2; <tt>Hash</tt>
</h3><div class="docstring">
<div class="discussion">
<p>Get notes from database</p>
</div>
</div>
<div class="tags">
<p class="tag_title">Parameters:</p>
<ul class="param">
<li>
<span class='name'>options</span>
<span class='type'>(<tt>Hash</tt>)</span>
<em class="default">(defaults to: <tt>{}</tt>)</em>
&mdash;
<div class='inline'>
<p>Query options</p>
</div>
</li>
</ul>
<p class="tag_title">Returns:</p>
<ul class="return">
<li>
<span class='type'>(<tt>Hash</tt>)</span>
&mdash;
<div class='inline'>
<p>Response with notes array</p>
</div>
</li>
</ul>
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
150
151
152</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/mcp/metasploit/messagepack_client.rb', line 150</span>
<span class='kw'>def</span> <span class='id identifier rubyid_db_notes'>db_notes</span><span class='lparen'>(</span><span class='id identifier rubyid_options'>options</span> <span class='op'>=</span> <span class='lbrace'>{</span><span class='rbrace'>}</span><span class='rparen'>)</span>
<span class='id identifier rubyid_call_api'>call_api</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>db.notes</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span> <span class='lbracket'>[</span><span class='id identifier rubyid_options'>options</span><span class='rbracket'>]</span><span class='rparen'>)</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="db_services-instance_method">
#<strong>db_services</strong>(options = {}) &#x21d2; <tt>Hash</tt>
</h3><div class="docstring">
<div class="discussion">
<p>Get services from database</p>
</div>
</div>
<div class="tags">
<p class="tag_title">Parameters:</p>
<ul class="param">
<li>
<span class='name'>options</span>
<span class='type'>(<tt>Hash</tt>)</span>
<em class="default">(defaults to: <tt>{}</tt>)</em>
&mdash;
<div class='inline'>
<p>Query options</p>
</div>
</li>
</ul>
<p class="tag_title">Returns:</p>
<ul class="return">
<li>
<span class='type'>(<tt>Hash</tt>)</span>
&mdash;
<div class='inline'>
<p>Response with services array</p>
</div>
</li>
</ul>
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
136
137
138</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/mcp/metasploit/messagepack_client.rb', line 136</span>
<span class='kw'>def</span> <span class='id identifier rubyid_db_services'>db_services</span><span class='lparen'>(</span><span class='id identifier rubyid_options'>options</span> <span class='op'>=</span> <span class='lbrace'>{</span><span class='rbrace'>}</span><span class='rparen'>)</span>
<span class='id identifier rubyid_call_api'>call_api</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>db.services</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span> <span class='lbracket'>[</span><span class='id identifier rubyid_options'>options</span><span class='rbracket'>]</span><span class='rparen'>)</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="db_vulns-instance_method">
#<strong>db_vulns</strong>(options = {}) &#x21d2; <tt>Hash</tt>
</h3><div class="docstring">
<div class="discussion">
<p>Get vulnerabilities from database</p>
</div>
</div>
<div class="tags">
<p class="tag_title">Parameters:</p>
<ul class="param">
<li>
<span class='name'>options</span>
<span class='type'>(<tt>Hash</tt>)</span>
<em class="default">(defaults to: <tt>{}</tt>)</em>
&mdash;
<div class='inline'>
<p>Query options</p>
</div>
</li>
</ul>
<p class="tag_title">Returns:</p>
<ul class="return">
<li>
<span class='type'>(<tt>Hash</tt>)</span>
&mdash;
<div class='inline'>
<p>Response with vulns array</p>
</div>
</li>
</ul>
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
143
144
145</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/mcp/metasploit/messagepack_client.rb', line 143</span>
<span class='kw'>def</span> <span class='id identifier rubyid_db_vulns'>db_vulns</span><span class='lparen'>(</span><span class='id identifier rubyid_options'>options</span> <span class='op'>=</span> <span class='lbrace'>{</span><span class='rbrace'>}</span><span class='rparen'>)</span>
<span class='id identifier rubyid_call_api'>call_api</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>db.vulns</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span> <span class='lbracket'>[</span><span class='id identifier rubyid_options'>options</span><span class='rbracket'>]</span><span class='rparen'>)</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="module_info-instance_method">
#<strong>module_info</strong>(type, name) &#x21d2; <tt>Hash</tt>
</h3><div class="docstring">
<div class="discussion">
<p>Get module information</p>
</div>
</div>
<div class="tags">
<p class="tag_title">Parameters:</p>
<ul class="param">
<li>
<span class='name'>type</span>
<span class='type'>(<tt>String</tt>)</span>
&mdash;
<div class='inline'>
<p>Module type (exploit, auxiliary, post, etc.)</p>
</div>
</li>
<li>
<span class='name'>name</span>
<span class='type'>(<tt>String</tt>)</span>
&mdash;
<div class='inline'>
<p>Module name</p>
</div>
</li>
</ul>
<p class="tag_title">Returns:</p>
<ul class="return">
<li>
<span class='type'>(<tt>Hash</tt>)</span>
&mdash;
<div class='inline'>
<p>Module information</p>
</div>
</li>
</ul>
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
122
123
124</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/mcp/metasploit/messagepack_client.rb', line 122</span>
<span class='kw'>def</span> <span class='id identifier rubyid_module_info'>module_info</span><span class='lparen'>(</span><span class='id identifier rubyid_type'>type</span><span class='comma'>,</span> <span class='id identifier rubyid_name'>name</span><span class='rparen'>)</span>
<span class='id identifier rubyid_call_api'>call_api</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>module.info</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span> <span class='lbracket'>[</span><span class='id identifier rubyid_type'>type</span><span class='comma'>,</span> <span class='id identifier rubyid_name'>name</span><span class='rbracket'>]</span><span class='rparen'>)</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="search_modules-instance_method">
#<strong>search_modules</strong>(query) &#x21d2; <tt>Array&lt;Hash&gt;</tt>
</h3><div class="docstring">
<div class="discussion">
<p>Search for Metasploit modules</p>
</div>
</div>
<div class="tags">
<p class="tag_title">Parameters:</p>
<ul class="param">
<li>
<span class='name'>query</span>
<span class='type'>(<tt>String</tt>)</span>
&mdash;
<div class='inline'>
<p>Search query</p>
</div>
</li>
</ul>
<p class="tag_title">Returns:</p>
<ul class="return">
<li>
<span class='type'>(<tt>Array&lt;Hash&gt;</tt>)</span>
&mdash;
<div class='inline'>
<p>Module metadata</p>
</div>
</li>
</ul>
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
114
115
116</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/mcp/metasploit/messagepack_client.rb', line 114</span>
<span class='kw'>def</span> <span class='id identifier rubyid_search_modules'>search_modules</span><span class='lparen'>(</span><span class='id identifier rubyid_query'>query</span><span class='rparen'>)</span>
<span class='id identifier rubyid_call_api'>call_api</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>module.search</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span> <span class='lbracket'>[</span><span class='id identifier rubyid_query'>query</span><span class='rbracket'>]</span><span class='rparen'>)</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="shutdown-instance_method">
#<strong>shutdown</strong> &#x21d2; <tt>Object</tt>
</h3><div class="docstring">
<div class="discussion">
<p>Shutdown client and cleanup</p>
</div>
</div>
<div class="tags">
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
169
170
171
172
173
174
175</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/mcp/metasploit/messagepack_client.rb', line 169</span>
<span class='kw'>def</span> <span class='id identifier rubyid_shutdown'>shutdown</span>
<span class='ivar'>@token</span> <span class='op'>=</span> <span class='kw'>nil</span>
<span class='ivar'>@user</span> <span class='op'>=</span> <span class='kw'>nil</span>
<span class='ivar'>@password</span> <span class='op'>=</span> <span class='kw'>nil</span>
<span class='ivar'>@http</span><span class='op'>&amp;.</span><span class='id identifier rubyid_finish'>finish</span> <span class='kw'>if</span> <span class='ivar'>@http</span><span class='op'>&amp;.</span><span class='id identifier rubyid_started?'>started?</span>
<span class='ivar'>@http</span> <span class='op'>=</span> <span class='kw'>nil</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
</div>
</div>
<div id="footer">
Generated on Fri May 8 17:03:44 2026 by
<a href="https://yardoc.org" title="Yay! A Ruby Documentation Tool" target="_parent">yard</a>
0.9.37 (ruby-3.1.5).
</div>
</div>
</body>
</html>