mirror of
https://github.com/moloch--/sliver-script
synced 2026-06-08 16:08:26 +00:00
43 lines
21 KiB
HTML
43 lines
21 KiB
HTML
<!DOCTYPE html><html class="default"><head><meta charSet="utf-8"/><meta http-equiv="x-ua-compatible" content="IE=edge"/><title>sliver-script</title><meta name="description" content="Documentation for sliver-script"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="stylesheet" href="assets/style.css"/><link rel="stylesheet" href="assets/highlight.css"/><script async src="assets/search.js" id="search-script"></script></head><body><script>document.body.classList.add(localStorage.getItem("tsd-theme") || "os")</script><header><div class="tsd-page-toolbar"><div class="container"><div class="table-wrap"><div class="table-cell" id="tsd-search" data-base="."><div class="field"><label for="tsd-search-field" class="tsd-widget search no-caption">Search</label><input type="text" id="tsd-search-field"/></div><ul class="results"><li class="state loading">Preparing search index...</li><li class="state failure">The search index is not available</li></ul><a href="index.html" class="title">sliver-script</a></div><div class="table-cell" id="tsd-widgets"><div id="tsd-filter"><a href="#" class="tsd-widget options no-caption" data-toggle="options">Options</a><div class="tsd-filter-group"><div class="tsd-select" id="tsd-filter-visibility"><span class="tsd-select-label">All</span><ul class="tsd-select-list"><li data-value="public">Public</li><li data-value="protected">Public/Protected</li><li data-value="private" class="selected">All</li></ul></div> <input type="checkbox" id="tsd-filter-inherited" checked/><label class="tsd-widget" for="tsd-filter-inherited">Inherited</label><input type="checkbox" id="tsd-filter-externals" checked/><label class="tsd-widget" for="tsd-filter-externals">Externals</label></div></div><a href="#" class="tsd-widget menu no-caption" data-toggle="menu">Menu</a></div></div></div></div><div class="tsd-page-title"><div class="container"><h1>sliver-script</h1></div></div></header><div class="container container-main"><div class="row"><div class="col-8 col-content"><div class="tsd-panel tsd-typography">
|
|
<a href="#sliver-script" id="sliver-script" style="color: inherit; text-decoration: none;">
|
|
<h1>Sliver Script</h1>
|
|
</a>
|
|
<p>Sliver-script is a TypeScript/JavaScript client library for Sliver, it can be used to automate any operator interaction with Sliver. Sliver-script uses existing Sliver client configuration files and connects to servers using gRPC over Mutual-TLS. It also provides <a href="https://www.learnrxjs.io/">RxJS</a> abstractions for easy interactions with real-time components.</p>
|
|
<p>⚠️ Support for Sliver v1.5+ is a work in progress.</p>
|
|
<p><a href="https://github.com/moloch--/sliver-script/actions/workflows/publish.yml"><img src="https://github.com/moloch--/sliver-script/actions/workflows/publish.yml/badge.svg" alt="NPM Publish"></a>
|
|
<a href="https://www.gnu.org/licenses/gpl-3.0"><img src="https://img.shields.io/badge/License-GPLv3-blue.svg" alt="License: GPL v3"></a></p>
|
|
|
|
<a href="#install" id="install" style="color: inherit; text-decoration: none;">
|
|
<h3>Install</h3>
|
|
</a>
|
|
<p>Node v14 or later is required for this package, and it can be installed via npm:</p>
|
|
<p><code>npm install sliver-script</code></p>
|
|
|
|
<a href="#typescript-example" id="typescript-example" style="color: inherit; text-decoration: none;">
|
|
<h3>TypeScript Example</h3>
|
|
</a>
|
|
|
|
<a href="#basic" id="basic" style="color: inherit; text-decoration: none;">
|
|
<h4>Basic</h4>
|
|
</a>
|
|
<pre><code class="language-typescript"><span class="hl-0">import</span><span class="hl-1"> { </span><span class="hl-2">SliverClient</span><span class="hl-1">, </span><span class="hl-2">ParseConfigFile</span><span class="hl-1"> } </span><span class="hl-0">from</span><span class="hl-1"> </span><span class="hl-3">'sliver-script'</span><br/><br/><span class="hl-1">(</span><span class="hl-4">async</span><span class="hl-1"> </span><span class="hl-4">function</span><span class="hl-1">() {</span><br/><span class="hl-1"> </span><br/><span class="hl-1"> </span><span class="hl-4">const</span><span class="hl-1"> </span><span class="hl-5">config</span><span class="hl-1"> = </span><span class="hl-0">await</span><span class="hl-1"> </span><span class="hl-6">ParseConfigFile</span><span class="hl-1">(</span><span class="hl-3">'./moloch_localhost.cfg'</span><span class="hl-1">)</span><br/><span class="hl-1"> </span><span class="hl-4">const</span><span class="hl-1"> </span><span class="hl-5">client</span><span class="hl-1"> = </span><span class="hl-4">new</span><span class="hl-1"> </span><span class="hl-6">SliverClient</span><span class="hl-1">(</span><span class="hl-2">config</span><span class="hl-1">)</span><br/><br/><span class="hl-1"> </span><span class="hl-2">console</span><span class="hl-1">.</span><span class="hl-6">log</span><span class="hl-1">(</span><span class="hl-3">`Connecting to </span><span class="hl-4">${</span><span class="hl-2">client</span><span class="hl-7">.</span><span class="hl-6">host</span><span class="hl-7">()</span><span class="hl-4">}</span><span class="hl-3"> ...`</span><span class="hl-1">)</span><br/><span class="hl-1"> </span><span class="hl-0">await</span><span class="hl-1"> </span><span class="hl-2">client</span><span class="hl-1">.</span><span class="hl-6">connect</span><span class="hl-1">()</span><br/><br/><span class="hl-1"> </span><span class="hl-4">const</span><span class="hl-1"> </span><span class="hl-5">sessions</span><span class="hl-1"> = </span><span class="hl-0">await</span><span class="hl-1"> </span><span class="hl-2">client</span><span class="hl-1">.</span><span class="hl-6">sessions</span><span class="hl-1">()</span><br/><span class="hl-1"> </span><span class="hl-2">console</span><span class="hl-1">.</span><span class="hl-6">log</span><span class="hl-1">(</span><span class="hl-2">sessions</span><span class="hl-1">)</span><br/><br/><span class="hl-1">})()</span>
|
|
</code></pre>
|
|
|
|
<a href="#monitor-events-in-real-time" id="monitor-events-in-real-time" style="color: inherit; text-decoration: none;">
|
|
<h4>Monitor Events in Real-time</h4>
|
|
</a>
|
|
<pre><code class="language-typescript"><span class="hl-0">import</span><span class="hl-1"> { </span><span class="hl-2">SliverClient</span><span class="hl-1">, </span><span class="hl-2">ParseConfigFile</span><span class="hl-1"> } </span><span class="hl-0">from</span><span class="hl-1"> </span><span class="hl-3">'sliver-script'</span><br/><br/><span class="hl-1">(</span><span class="hl-4">async</span><span class="hl-1"> </span><span class="hl-4">function</span><span class="hl-1">() {</span><br/><br/><span class="hl-1"> </span><span class="hl-4">const</span><span class="hl-1"> </span><span class="hl-5">config</span><span class="hl-1"> = </span><span class="hl-0">await</span><span class="hl-1"> </span><span class="hl-6">ParseConfigFile</span><span class="hl-1">(</span><span class="hl-3">'./moloch_localhost.cfg'</span><span class="hl-1">)</span><br/><br/><span class="hl-1"> </span><span class="hl-4">const</span><span class="hl-1"> </span><span class="hl-5">client</span><span class="hl-1"> = </span><span class="hl-4">new</span><span class="hl-1"> </span><span class="hl-6">SliverClient</span><span class="hl-1">(</span><span class="hl-2">config</span><span class="hl-1">)</span><br/><span class="hl-1"> </span><span class="hl-0">await</span><span class="hl-1"> </span><span class="hl-2">client</span><span class="hl-1">.</span><span class="hl-6">connect</span><span class="hl-1">()</span><br/><span class="hl-1"> </span><span class="hl-2">client</span><span class="hl-1">.</span><span class="hl-2">event$</span><span class="hl-1">.</span><span class="hl-6">subscribe</span><span class="hl-1">((</span><span class="hl-2">event</span><span class="hl-1">) </span><span class="hl-4">=></span><span class="hl-1"> {</span><br/><span class="hl-1"> </span><span class="hl-2">console</span><span class="hl-1">.</span><span class="hl-6">log</span><span class="hl-1">(</span><span class="hl-2">event</span><span class="hl-1">)</span><br/><span class="hl-1"> })</span><br/><br/><span class="hl-1">})()</span>
|
|
</code></pre>
|
|
|
|
<a href="#automatically-interact-with-new-sessions" id="automatically-interact-with-new-sessions" style="color: inherit; text-decoration: none;">
|
|
<h4>Automatically Interact with New Sessions</h4>
|
|
</a>
|
|
<pre><code class="language-typescript"><span class="hl-0">import</span><span class="hl-1"> { </span><span class="hl-2">SliverClient</span><span class="hl-1">, </span><span class="hl-2">ParseConfigFile</span><span class="hl-1"> } </span><span class="hl-0">from</span><span class="hl-1"> </span><span class="hl-3">'sliver-script'</span><br/><br/><br/><span class="hl-1">(</span><span class="hl-4">async</span><span class="hl-1"> </span><span class="hl-4">function</span><span class="hl-1">() {</span><br/><br/><span class="hl-1"> </span><span class="hl-4">const</span><span class="hl-1"> </span><span class="hl-5">config</span><span class="hl-1"> = </span><span class="hl-0">await</span><span class="hl-1"> </span><span class="hl-6">ParseConfigFile</span><span class="hl-1">(</span><span class="hl-3">'moloch_localhost.cfg'</span><span class="hl-1">)</span><br/><span class="hl-1"> </span><span class="hl-4">const</span><span class="hl-1"> </span><span class="hl-5">client</span><span class="hl-1"> = </span><span class="hl-4">new</span><span class="hl-1"> </span><span class="hl-6">SliverClient</span><span class="hl-1">(</span><span class="hl-2">config</span><span class="hl-1">);</span><br/><span class="hl-1"> </span><span class="hl-0">await</span><span class="hl-1"> </span><span class="hl-2">client</span><span class="hl-1">.</span><span class="hl-6">connect</span><span class="hl-1">()</span><br/><br/><span class="hl-1"> </span><span class="hl-2">console</span><span class="hl-1">.</span><span class="hl-6">log</span><span class="hl-1">(</span><span class="hl-3">'Waiting for new sessions ...'</span><span class="hl-1">)</span><br/><span class="hl-1"> </span><span class="hl-2">client</span><span class="hl-1">.</span><span class="hl-2">session$</span><span class="hl-1">.</span><span class="hl-6">subscribe</span><span class="hl-1">(</span><span class="hl-4">async</span><span class="hl-1"> (</span><span class="hl-2">event</span><span class="hl-1">) </span><span class="hl-4">=></span><span class="hl-1"> {</span><br/><span class="hl-1"> </span><span class="hl-2">console</span><span class="hl-1">.</span><span class="hl-6">log</span><span class="hl-1">(</span><span class="hl-3">`New session #</span><span class="hl-4">${</span><span class="hl-2">event</span><span class="hl-7">.</span><span class="hl-6">getSession</span><span class="hl-7">().</span><span class="hl-6">getId</span><span class="hl-7">()</span><span class="hl-4">}</span><span class="hl-3">!`</span><span class="hl-1">)</span><br/><span class="hl-1"> </span><span class="hl-4">const</span><span class="hl-1"> </span><span class="hl-5">session</span><span class="hl-1"> = </span><span class="hl-0">await</span><span class="hl-1"> </span><span class="hl-2">client</span><span class="hl-1">.</span><span class="hl-6">interactWith</span><span class="hl-1">(</span><span class="hl-2">event</span><span class="hl-1">.</span><span class="hl-6">getSession</span><span class="hl-1">())</span><br/><span class="hl-1"> </span><span class="hl-4">const</span><span class="hl-1"> </span><span class="hl-5">ls</span><span class="hl-1"> = </span><span class="hl-0">await</span><span class="hl-1"> </span><span class="hl-2">session</span><span class="hl-1">.</span><span class="hl-6">ls</span><span class="hl-1">()</span><br/><span class="hl-1"> </span><span class="hl-2">console</span><span class="hl-1">.</span><span class="hl-6">log</span><span class="hl-1">(</span><span class="hl-3">`Path: </span><span class="hl-4">${</span><span class="hl-2">ls</span><span class="hl-7">.</span><span class="hl-6">getPath</span><span class="hl-7">()</span><span class="hl-4">}</span><span class="hl-3">`</span><span class="hl-1">)</span><br/><span class="hl-1"> </span><span class="hl-2">ls</span><span class="hl-1">.</span><span class="hl-6">getFilesList</span><span class="hl-1">().</span><span class="hl-6">forEach</span><span class="hl-1">(</span><span class="hl-2">file</span><span class="hl-1"> </span><span class="hl-4">=></span><span class="hl-1"> {</span><br/><span class="hl-1"> </span><span class="hl-2">console</span><span class="hl-1">.</span><span class="hl-6">log</span><span class="hl-1">(</span><span class="hl-3">`Name: </span><span class="hl-4">${</span><span class="hl-2">file</span><span class="hl-7">.</span><span class="hl-6">getName</span><span class="hl-7">()</span><span class="hl-4">}</span><span class="hl-3"> (Size: </span><span class="hl-4">${</span><span class="hl-2">file</span><span class="hl-7">.</span><span class="hl-6">getSize</span><span class="hl-7">()</span><span class="hl-4">}</span><span class="hl-3">)`</span><span class="hl-1">)</span><br/><span class="hl-1"> })</span><br/><span class="hl-1"> })</span><br/><br/><span class="hl-1">})()</span>
|
|
</code></pre>
|
|
|
|
<a href="#javascript-example" id="javascript-example" style="color: inherit; text-decoration: none;">
|
|
<h3>JavaScript Example</h3>
|
|
</a>
|
|
<pre><code class="language-javascript"><span class="hl-4">const</span><span class="hl-1"> </span><span class="hl-5">sliver</span><span class="hl-1"> = </span><span class="hl-6">require</span><span class="hl-1">(</span><span class="hl-3">'sliver-script'</span><span class="hl-1">)</span><br/><br/><span class="hl-1">(</span><span class="hl-4">async</span><span class="hl-1"> </span><span class="hl-4">function</span><span class="hl-1">() { </span><br/><br/><span class="hl-1"> </span><span class="hl-4">const</span><span class="hl-1"> </span><span class="hl-5">config</span><span class="hl-1"> = </span><span class="hl-0">await</span><span class="hl-1"> </span><span class="hl-2">sliver</span><span class="hl-1">.</span><span class="hl-6">ParseConfigFile</span><span class="hl-1">(</span><span class="hl-3">'./moloch_localhost.cfg'</span><span class="hl-1">)</span><br/><span class="hl-1"> </span><span class="hl-4">const</span><span class="hl-1"> </span><span class="hl-5">client</span><span class="hl-1"> = </span><span class="hl-4">new</span><span class="hl-1"> </span><span class="hl-2">sliver</span><span class="hl-1">.</span><span class="hl-6">SliverClient</span><span class="hl-1">(</span><span class="hl-2">config</span><span class="hl-1">)</span><br/><span class="hl-1"> </span><span class="hl-0">await</span><span class="hl-1"> </span><span class="hl-2">client</span><span class="hl-1">.</span><span class="hl-6">connect</span><span class="hl-1">()</span><br/><br/><span class="hl-1"> </span><span class="hl-2">console</span><span class="hl-1">.</span><span class="hl-6">log</span><span class="hl-1">(</span><span class="hl-3">'Waiting for new sessions ...'</span><span class="hl-1">)</span><br/><br/><span class="hl-1"> </span><span class="hl-2">client</span><span class="hl-1">.</span><span class="hl-2">session$</span><span class="hl-1">.</span><span class="hl-6">subscribe</span><span class="hl-1">(</span><span class="hl-4">async</span><span class="hl-1"> (</span><span class="hl-2">event</span><span class="hl-1">) </span><span class="hl-4">=></span><span class="hl-1"> {</span><br/><br/><span class="hl-1"> </span><span class="hl-2">console</span><span class="hl-1">.</span><span class="hl-6">log</span><span class="hl-1">(</span><span class="hl-3">`New session #</span><span class="hl-4">${</span><span class="hl-2">event</span><span class="hl-7">.</span><span class="hl-6">getSession</span><span class="hl-7">().</span><span class="hl-6">getId</span><span class="hl-7">()</span><span class="hl-4">}</span><span class="hl-3">!`</span><span class="hl-1">)</span><br/><br/><span class="hl-1"> </span><span class="hl-4">const</span><span class="hl-1"> </span><span class="hl-5">session</span><span class="hl-1"> = </span><span class="hl-0">await</span><span class="hl-1"> </span><span class="hl-2">client</span><span class="hl-1">.</span><span class="hl-6">interactWith</span><span class="hl-1">(</span><span class="hl-2">event</span><span class="hl-1">.</span><span class="hl-6">getSession</span><span class="hl-1">())</span><br/><span class="hl-1"> </span><span class="hl-4">const</span><span class="hl-1"> </span><span class="hl-5">ls</span><span class="hl-1"> = </span><span class="hl-0">await</span><span class="hl-1"> </span><span class="hl-2">session</span><span class="hl-1">.</span><span class="hl-6">ls</span><span class="hl-1">()</span><br/><span class="hl-1"> </span><span class="hl-2">console</span><span class="hl-1">.</span><span class="hl-6">log</span><span class="hl-1">(</span><span class="hl-3">`Path: </span><span class="hl-4">${</span><span class="hl-2">ls</span><span class="hl-7">.</span><span class="hl-6">getPath</span><span class="hl-7">()</span><span class="hl-4">}</span><span class="hl-3">`</span><span class="hl-1">)</span><br/><span class="hl-1"> </span><span class="hl-2">ls</span><span class="hl-1">.</span><span class="hl-6">getFilesList</span><span class="hl-1">().</span><span class="hl-6">forEach</span><span class="hl-1">(</span><span class="hl-2">file</span><span class="hl-1"> </span><span class="hl-4">=></span><span class="hl-1"> {</span><br/><span class="hl-1"> </span><span class="hl-2">console</span><span class="hl-1">.</span><span class="hl-6">log</span><span class="hl-1">(</span><span class="hl-3">`Name: </span><span class="hl-4">${</span><span class="hl-2">file</span><span class="hl-7">.</span><span class="hl-6">getName</span><span class="hl-7">()</span><span class="hl-4">}</span><span class="hl-3"> (Size: </span><span class="hl-4">${</span><span class="hl-2">file</span><span class="hl-7">.</span><span class="hl-6">getSize</span><span class="hl-7">()</span><span class="hl-4">}</span><span class="hl-3">)`</span><span class="hl-1">)</span><br/><span class="hl-1"> })</span><br/><span class="hl-1"> </span><br/><span class="hl-1"> })</span><br/><br/><span class="hl-1">})()</span>
|
|
</code></pre>
|
|
</div></div><div class="col-4 col-menu menu-sticky-wrap menu-highlight"><nav class="tsd-navigation primary"><ul><li class="current"><a href="modules.html">Exports</a></li></ul></nav><nav class="tsd-navigation secondary menu-sticky"><ul><li class="tsd-kind-class"><a href="classes/InteractiveBeacon.html" class="tsd-kind-icon">Interactive<wbr/>Beacon</a></li><li class="tsd-kind-class"><a href="classes/InteractiveSession.html" class="tsd-kind-icon">Interactive<wbr/>Session</a></li><li class="tsd-kind-class"><a href="classes/SliverClient.html" class="tsd-kind-icon">Sliver<wbr/>Client</a></li><li class="tsd-kind-interface"><a href="interfaces/SliverClientConfig.html" class="tsd-kind-icon">Sliver<wbr/>Client<wbr/>Config</a></li><li class="tsd-kind-interface"><a href="interfaces/Tunnel.html" class="tsd-kind-icon">Tunnel</a></li><li class="tsd-kind-function"><a href="modules.html#ListConfigs" class="tsd-kind-icon">List<wbr/>Configs</a></li><li class="tsd-kind-function"><a href="modules.html#ParseConfig" class="tsd-kind-icon">Parse<wbr/>Config</a></li><li class="tsd-kind-function"><a href="modules.html#ParseConfigFile" class="tsd-kind-icon">Parse<wbr/>Config<wbr/>File</a></li><li class="tsd-kind-function"><a href="modules.html#gunzip" class="tsd-kind-icon">gunzip</a></li><li class="tsd-kind-function"><a href="modules.html#gzip" class="tsd-kind-icon">gzip</a></li></ul></nav></div></div></div><footer class="with-border-bottom"><div class="container"><h2>Legend</h2><div class="tsd-legend-group"><ul class="tsd-legend"><li class="tsd-kind-constructor tsd-parent-kind-class"><span class="tsd-kind-icon">Constructor</span></li><li class="tsd-kind-property tsd-parent-kind-class"><span class="tsd-kind-icon">Property</span></li><li class="tsd-kind-method tsd-parent-kind-class"><span class="tsd-kind-icon">Method</span></li></ul><ul class="tsd-legend"><li class="tsd-kind-property tsd-parent-kind-class tsd-is-private"><span class="tsd-kind-icon">Private property</span></li><li class="tsd-kind-method tsd-parent-kind-class tsd-is-private"><span class="tsd-kind-icon">Private method</span></li></ul><ul class="tsd-legend"><li class="tsd-kind-property tsd-parent-kind-interface"><span class="tsd-kind-icon">Property</span></li></ul><ul class="tsd-legend"><li class="tsd-kind-method tsd-parent-kind-class tsd-is-inherited"><span class="tsd-kind-icon">Inherited method</span></li></ul><ul class="tsd-legend"><li class="tsd-kind-method tsd-parent-kind-class tsd-is-protected"><span class="tsd-kind-icon">Protected method</span></li></ul></div><h2>Settings</h2><p>Theme <select id="theme"><option value="os">OS</option><option value="light">Light</option><option value="dark">Dark</option></select></p></div></footer><div class="container tsd-generator"><p>Generated using <a href="https://typedoc.org/" target="_blank">TypeDoc</a></p></div><div class="overlay"></div><script src="assets/main.js"></script></body></html> |