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

3525 lines
165 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>
Module: Msf::Exploit::Capture
&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::Exploit::Capture";
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 (C)</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="../Exploit.html" title="Msf::Exploit (class)">Exploit</a></span></span>
&raquo;
<span class="title">Capture</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>Module: Msf::Exploit::Capture
</h1>
<div class="box_info">
<dl>
<dt>Included in:</dt>
<dd><span class='object_link'><a href="../Auxiliary/NTP.html" title="Msf::Auxiliary::NTP (module)">Auxiliary::NTP</a></span></dd>
</dl>
<dl>
<dt>Defined in:</dt>
<dd>lib/msf/core/exploit/capture.rb</dd>
</dl>
</div>
<h2>Instance Attribute Summary <small><a href="#" class="summary_toggle">collapse</a></small></h2>
<ul class="summary">
<li class="public ">
<span class="summary_signature">
<a href="#arp_cache-instance_method" title="#arp_cache (instance method)">#<strong>arp_cache</strong> &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>Returns the value of attribute arp_cache.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#arp_capture-instance_method" title="#arp_capture (instance method)">#<strong>arp_capture</strong> &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>Returns the value of attribute arp_capture.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#capture-instance_method" title="#capture (instance method)">#<strong>capture</strong> &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>Returns the value of attribute capture.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#dst_cache-instance_method" title="#dst_cache (instance method)">#<strong>dst_cache</strong> &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>Returns the value of attribute dst_cache.</p>
</div></span>
</li>
</ul>
<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="#arp-instance_method" title="#arp (instance method)">#<strong>arp</strong>(target_ip = nil) &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>A pure-Ruby ARP exchange.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#arp_packet-instance_method" title="#arp_packet (instance method)">#<strong>arp_packet</strong>(target_ip = nil, source_ip = nil) &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>Creates a full ARP packet, mainly for use with inject_eth().</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#capture_extract_ies-instance_method" title="#capture_extract_ies (instance method)">#<strong>capture_extract_ies</strong>(raw) &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'></div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#capture_icmp_echo_pack-instance_method" title="#capture_icmp_echo_pack (instance method)">#<strong>capture_icmp_echo_pack</strong>(id = nil, seq = nil, payload = nil) &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>Intended to be used as the payload to an ICMP echo requests payload.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#capture_icmp_echo_unpack-instance_method" title="#capture_icmp_echo_unpack (instance method)">#<strong>capture_icmp_echo_unpack</strong>(data) &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>Decodes and ICMP echo request or response.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#capture_sendto-instance_method" title="#capture_sendto (instance method)">#<strong>capture_sendto</strong>(payload = &quot;&quot;, dhost = nil, bcast = false, dev = nil) &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>Sends a payload to a given target using the pcap capture interface.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#check_pcaprub_loaded-instance_method" title="#check_pcaprub_loaded (instance method)">#<strong>check_pcaprub_loaded</strong> &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'></div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#close_pcap-instance_method" title="#close_pcap (instance method)">#<strong>close_pcap</strong> &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'></div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#each_packet-instance_method" title="#each_packet (instance method)">#<strong>each_packet</strong> &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>Loop through each packet.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#expire_arpcache-instance_method" title="#expire_arpcache (instance method)">#<strong>expire_arpcache</strong> &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>Allow modules to reset their arp caches arbitrarily.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#get_interface_guid-instance_method" title="#get_interface_guid (instance method)">#<strong>get_interface_guid</strong>(dev) &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>This function is useful only on windows where pcaprub use the GUID.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#get_ipv4_addr-instance_method" title="#get_ipv4_addr (instance method)">#<strong>get_ipv4_addr</strong>(dev, num = 0) &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'></div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#get_ipv4_addr_count-instance_method" title="#get_ipv4_addr_count (instance method)">#<strong>get_ipv4_addr_count</strong>(dev) &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'></div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#get_ipv4_broadcast-instance_method" title="#get_ipv4_broadcast (instance method)">#<strong>get_ipv4_broadcast</strong>(dev, num = 0) &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'></div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#get_ipv4_netmask-instance_method" title="#get_ipv4_netmask (instance method)">#<strong>get_ipv4_netmask</strong>(dev, num = 0) &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'></div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#get_ipv6_addr-instance_method" title="#get_ipv6_addr (instance method)">#<strong>get_ipv6_addr</strong>(dev, num = 0) &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>NOTE: IPv6 is not implemented on Windows.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#get_ipv6_addr_count-instance_method" title="#get_ipv6_addr_count (instance method)">#<strong>get_ipv6_addr_count</strong>(dev) &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'></div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#get_ipv6_netmask-instance_method" title="#get_ipv6_netmask (instance method)">#<strong>get_ipv6_netmask</strong>(dev, num = 0) &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'></div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#get_mac-instance_method" title="#get_mac (instance method)">#<strong>get_mac</strong>(dev) &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'></div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#initialize-instance_method" title="#initialize (instance method)">#<strong>initialize</strong>(info = {}) &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>Initializes an instance of an exploit module that captures traffic.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#inject-instance_method" title="#inject (instance method)">#<strong>inject</strong>(pkt = &quot;&quot;, pcap = self.capture) &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>Injects a packet on the wire.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#inject_eth-instance_method" title="#inject_eth (instance method)">#<strong>inject_eth</strong>(args = {}) &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>Injects an Ethernet packet with an optional payload.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#inject_pcap-instance_method" title="#inject_pcap (instance method)">#<strong>inject_pcap</strong>(pcap_file, filter = nil, delay = 0, pcap = self.capture) &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'></div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#inject_reply-instance_method" title="#inject_reply (instance method)">#<strong>inject_reply</strong>(proto = :udp, pcap = self.capture) &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>The return value either be a PacketFu::Packet object, or nil.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#is_interface%3F-instance_method" title="#is_interface? (instance method)">#<strong>is_interface?</strong>(dev) &#x21d2; Boolean </a>
</span>
<span class="summary_desc"><div class='inline'></div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#list_interfaces-instance_method" title="#list_interfaces (instance method)">#<strong>list_interfaces</strong> &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'></div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#lookup_eth-instance_method" title="#lookup_eth (instance method)">#<strong>lookup_eth</strong>(addr = nil, iface = nil) &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>This ascertains the correct Ethernet addresses one should use to ensure injected IP packets actually get where they are going, and manages the self.arp_cache hash.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#lookupnet-instance_method" title="#lookupnet (instance method)">#<strong>lookupnet</strong> &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'></div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#netifaces_implemented%3F-instance_method" title="#netifaces_implemented? (instance method)">#<strong>netifaces_implemented?</strong> &#x21d2; Boolean </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>Netifaces code.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#open_pcap-instance_method" title="#open_pcap (instance method)">#<strong>open_pcap</strong>(opts = {}) &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>Opens a handle to the specified device.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#probe_gateway-instance_method" title="#probe_gateway (instance method)">#<strong>probe_gateway</strong>(addr) &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'></div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#rhost-instance_method" title="#rhost (instance method)">#<strong>rhost</strong> &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'>
<p>For compatibility with Msf::Exploit::Remote::Ip.</p>
</div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#should_arp%3F-instance_method" title="#should_arp? (instance method)">#<strong>should_arp?</strong>(ip) &#x21d2; Boolean </a>
</span>
<span class="summary_desc"><div class='inline'></div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#stats_drop-instance_method" title="#stats_drop (instance method)">#<strong>stats_drop</strong>(pcap = self.capture) &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'></div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#stats_ifdrop-instance_method" title="#stats_ifdrop (instance method)">#<strong>stats_ifdrop</strong>(pcap = self.capture) &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'></div></span>
</li>
<li class="public ">
<span class="summary_signature">
<a href="#stats_recv-instance_method" title="#stats_recv (instance method)">#<strong>stats_recv</strong>(pcap = self.capture) &#x21d2; Object </a>
</span>
<span class="summary_desc"><div class='inline'></div></span>
</li>
</ul>
<div id="instance_attr_details" class="attr_details">
<h2>Instance Attribute Details</h2>
<span id="arp_cache=-instance_method"></span>
<div class="method_details first">
<h3 class="signature first" id="arp_cache-instance_method">
#<strong>arp_cache</strong> &#x21d2; <tt>Object</tt>
</h3><div class="docstring">
<div class="discussion">
<p>Returns the value of attribute arp_cache.</p>
</div>
</div>
<div class="tags">
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
425
426
427</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/exploit/capture.rb', line 425</span>
<span class='kw'>def</span> <span class='id identifier rubyid_arp_cache'>arp_cache</span>
<span class='ivar'>@arp_cache</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<span id="arp_capture=-instance_method"></span>
<div class="method_details ">
<h3 class="signature " id="arp_capture-instance_method">
#<strong>arp_capture</strong> &#x21d2; <tt>Object</tt>
</h3><div class="docstring">
<div class="discussion">
<p>Returns the value of attribute arp_capture.</p>
</div>
</div>
<div class="tags">
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
425
426
427</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/exploit/capture.rb', line 425</span>
<span class='kw'>def</span> <span class='id identifier rubyid_arp_capture'>arp_capture</span>
<span class='ivar'>@arp_capture</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<span id="capture=-instance_method"></span>
<div class="method_details ">
<h3 class="signature " id="capture-instance_method">
#<strong>capture</strong> &#x21d2; <tt>Object</tt>
</h3><div class="docstring">
<div class="discussion">
<p>Returns the value of attribute capture.</p>
</div>
</div>
<div class="tags">
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
425
426
427</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/exploit/capture.rb', line 425</span>
<span class='kw'>def</span> <span class='id identifier rubyid_capture'>capture</span>
<span class='ivar'>@capture</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<span id="dst_cache=-instance_method"></span>
<div class="method_details ">
<h3 class="signature " id="dst_cache-instance_method">
#<strong>dst_cache</strong> &#x21d2; <tt>Object</tt>
</h3><div class="docstring">
<div class="discussion">
<p>Returns the value of attribute dst_cache.</p>
</div>
</div>
<div class="tags">
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
425
426
427</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/exploit/capture.rb', line 425</span>
<span class='kw'>def</span> <span class='id identifier rubyid_dst_cache'>dst_cache</span>
<span class='ivar'>@dst_cache</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="arp-instance_method">
#<strong>arp</strong>(target_ip = nil) &#x21d2; <tt>Object</tt>
</h3><div class="docstring">
<div class="discussion">
<p>A pure-Ruby ARP exchange. It uses self.arp_capture to send and recv packets, rather than self.capture.</p>
</div>
</div>
<div class="tags">
<p class="tag_title">Raises:</p>
<ul class="raise">
<li>
<span class='type'>(<tt>RuntimeError</tt>)</span>
</li>
</ul>
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/exploit/capture.rb', line 340</span>
<span class='kw'>def</span> <span class='id identifier rubyid_arp'>arp</span><span class='lparen'>(</span><span class='id identifier rubyid_target_ip'>target_ip</span><span class='op'>=</span><span class='kw'>nil</span><span class='rparen'>)</span>
<span class='kw'>return</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_arp_cache'>arp_cache</span><span class='lbracket'>[</span><span class='id identifier rubyid_target_ip'>target_ip</span><span class='rbracket'>]</span> <span class='kw'>if</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_arp_cache'>arp_cache</span><span class='lbracket'>[</span><span class='id identifier rubyid_target_ip'>target_ip</span><span class='rbracket'>]</span>
<span class='kw'>return</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_arp_cache'>arp_cache</span><span class='lbracket'>[</span><span class='symbol'>:gateway</span><span class='rbracket'>]</span> <span class='kw'>unless</span> <span class='id identifier rubyid_should_arp?'>should_arp?</span> <span class='id identifier rubyid_target_ip'>target_ip</span>
<span class='id identifier rubyid_source_ip'>source_ip</span> <span class='op'>=</span> <span class='const'><span class='object_link'><a href="../../Rex.html" title="Rex (module)">Rex</a></span></span><span class='op'>::</span><span class='const'>Socket</span><span class='period'>.</span><span class='id identifier rubyid_source_address'>source_address</span><span class='lparen'>(</span><span class='id identifier rubyid_target_ip'>target_ip</span><span class='rparen'>)</span>
<span class='id identifier rubyid_raise'>raise</span> <span class='const'>RuntimeError</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Could not access the capture process.</span><span class='tstring_end'>&quot;</span></span> <span class='kw'>unless</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_arp_capture'>arp_capture</span>
<span class='id identifier rubyid_p'>p</span> <span class='op'>=</span> <span class='id identifier rubyid_arp_packet'>arp_packet</span><span class='lparen'>(</span><span class='id identifier rubyid_target_ip'>target_ip</span><span class='comma'>,</span> <span class='id identifier rubyid_source_ip'>source_ip</span><span class='rparen'>)</span>
<span class='comment'># Try up to 3 times to get an ARP response
</span> <span class='int'>1</span><span class='period'>.</span><span class='id identifier rubyid_upto'>upto</span><span class='lparen'>(</span><span class='int'>3</span><span class='rparen'>)</span> <span class='kw'>do</span>
<span class='id identifier rubyid_inject_eth'>inject_eth</span><span class='lparen'>(</span><span class='symbol'>:eth_type</span> <span class='op'>=&gt;</span> <span class='int'>0x0806</span><span class='comma'>,</span>
<span class='symbol'>:payload</span> <span class='op'>=&gt;</span> <span class='id identifier rubyid_p'>p</span><span class='comma'>,</span>
<span class='symbol'>:pcap</span> <span class='op'>=&gt;</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_arp_capture'>arp_capture</span><span class='comma'>,</span>
<span class='symbol'>:eth_saddr</span> <span class='op'>=&gt;</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_arp_cache'>arp_cache</span><span class='lbracket'>[</span><span class='const'><span class='object_link'><a href="../../Rex.html" title="Rex (module)">Rex</a></span></span><span class='op'>::</span><span class='const'>Socket</span><span class='period'>.</span><span class='id identifier rubyid_source_address'>source_address</span><span class='lparen'>(</span><span class='id identifier rubyid_target_ip'>target_ip</span><span class='rparen'>)</span><span class='rbracket'>]</span>
<span class='rparen'>)</span>
<span class='kw'>begin</span>
<span class='id identifier rubyid_to'>to</span> <span class='op'>=</span> <span class='lparen'>(</span><span class='lparen'>(</span><span class='id identifier rubyid_datastore'>datastore</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>TIMEOUT</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span> <span class='op'>||</span> <span class='int'>500</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_to_f'>to_f</span> <span class='op'>*</span> <span class='int'>8</span><span class='rparen'>)</span> <span class='op'>/</span> <span class='float'>1000.0</span>
<span class='op'>::</span><span class='const'>Timeout</span><span class='period'>.</span><span class='id identifier rubyid_timeout'>timeout</span><span class='lparen'>(</span><span class='id identifier rubyid_to'>to</span><span class='rparen'>)</span> <span class='kw'>do</span>
<span class='id identifier rubyid_loop'>loop</span> <span class='kw'>do</span>
<span class='id identifier rubyid_my_packet'>my_packet</span> <span class='op'>=</span> <span class='id identifier rubyid_inject_reply'>inject_reply</span><span class='lparen'>(</span><span class='symbol'>:arp</span><span class='comma'>,</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_arp_capture'>arp_capture</span><span class='rparen'>)</span>
<span class='kw'>next</span> <span class='kw'>unless</span> <span class='id identifier rubyid_my_packet'>my_packet</span>
<span class='kw'>next</span> <span class='kw'>unless</span> <span class='id identifier rubyid_my_packet'>my_packet</span><span class='period'>.</span><span class='id identifier rubyid_arp_saddr_ip'>arp_saddr_ip</span> <span class='op'>==</span> <span class='id identifier rubyid_target_ip'>target_ip</span>
<span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_arp_cache'>arp_cache</span><span class='lbracket'>[</span><span class='id identifier rubyid_target_ip'>target_ip</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='id identifier rubyid_my_packet'>my_packet</span><span class='period'>.</span><span class='id identifier rubyid_eth_saddr'>eth_saddr</span>
<span class='kw'>return</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_arp_cache'>arp_cache</span><span class='lbracket'>[</span><span class='id identifier rubyid_target_ip'>target_ip</span><span class='rbracket'>]</span>
<span class='kw'>end</span>
<span class='kw'>end</span>
<span class='kw'>rescue</span> <span class='op'>::</span><span class='const'>Timeout</span><span class='op'>::</span><span class='const'>Error</span>
<span class='kw'>end</span>
<span class='kw'>end</span>
<span class='kw'>nil</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="arp_packet-instance_method">
#<strong>arp_packet</strong>(target_ip = nil, source_ip = nil) &#x21d2; <tt>Object</tt>
</h3><div class="docstring">
<div class="discussion">
<p>Creates a full ARP packet, mainly for use with inject_eth()</p>
</div>
</div>
<div class="tags">
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
373
374
375
376
377
378
379
380
381</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/exploit/capture.rb', line 373</span>
<span class='kw'>def</span> <span class='id identifier rubyid_arp_packet'>arp_packet</span><span class='lparen'>(</span><span class='id identifier rubyid_target_ip'>target_ip</span><span class='op'>=</span><span class='kw'>nil</span><span class='comma'>,</span> <span class='id identifier rubyid_source_ip'>source_ip</span><span class='op'>=</span><span class='kw'>nil</span><span class='rparen'>)</span>
<span class='id identifier rubyid_p'>p</span> <span class='op'>=</span> <span class='const'>PacketFu</span><span class='op'>::</span><span class='const'>ARPPacket</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span>
<span class='id identifier rubyid_p'>p</span><span class='period'>.</span><span class='id identifier rubyid_arp_opcode'>arp_opcode</span> <span class='op'>=</span> <span class='int'>1</span>
<span class='id identifier rubyid_p'>p</span><span class='period'>.</span><span class='id identifier rubyid_arp_daddr_ip'>arp_daddr_ip</span> <span class='op'>=</span> <span class='id identifier rubyid_target_ip'>target_ip</span> <span class='op'>||</span> <span class='id identifier rubyid_datastore'>datastore</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>RHOST</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span>
<span class='id identifier rubyid_p'>p</span><span class='period'>.</span><span class='id identifier rubyid_arp_saddr_ip'>arp_saddr_ip</span> <span class='op'>=</span> <span class='id identifier rubyid_source_ip'>source_ip</span> <span class='op'>||</span> <span class='id identifier rubyid_datastore'>datastore</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>LHOST</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span>
<span class='id identifier rubyid_my_eth'>my_eth</span> <span class='op'>=</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_arp_cache'>arp_cache</span><span class='lbracket'>[</span><span class='const'><span class='object_link'><a href="../../Rex.html" title="Rex (module)">Rex</a></span></span><span class='op'>::</span><span class='const'>Socket</span><span class='period'>.</span><span class='id identifier rubyid_source_address'>source_address</span><span class='lparen'>(</span><span class='id identifier rubyid_target_ip'>target_ip</span><span class='rparen'>)</span><span class='rbracket'>]</span>
<span class='id identifier rubyid_p'>p</span><span class='period'>.</span><span class='id identifier rubyid_arp_saddr_mac'>arp_saddr_mac</span> <span class='op'>=</span> <span class='id identifier rubyid_my_eth'>my_eth</span> <span class='op'>||</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>00:00:00:00:00:00</span><span class='tstring_end'>&quot;</span></span>
<span class='kw'>return</span> <span class='id identifier rubyid_p'>p</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="capture_extract_ies-instance_method">
#<strong>capture_extract_ies</strong>(raw) &#x21d2; <tt>Object</tt>
</h3><table class="source_code">
<tr>
<td>
<pre class="lines">
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/exploit/capture.rb', line 147</span>
<span class='kw'>def</span> <span class='id identifier rubyid_capture_extract_ies'>capture_extract_ies</span><span class='lparen'>(</span><span class='id identifier rubyid_raw'>raw</span><span class='rparen'>)</span>
<span class='id identifier rubyid_set'>set</span> <span class='op'>=</span> <span class='lbrace'>{</span><span class='rbrace'>}</span>
<span class='id identifier rubyid_idx'>idx</span> <span class='op'>=</span> <span class='int'>0</span>
<span class='id identifier rubyid_len'>len</span> <span class='op'>=</span> <span class='int'>0</span>
<span class='kw'>while</span> <span class='lparen'>(</span><span class='id identifier rubyid_idx'>idx</span> <span class='op'>&lt;</span> <span class='id identifier rubyid_raw'>raw</span><span class='period'>.</span><span class='id identifier rubyid_length'>length</span><span class='rparen'>)</span>
<span class='id identifier rubyid_len'>len</span> <span class='op'>=</span> <span class='id identifier rubyid_raw'>raw</span><span class='lbracket'>[</span><span class='id identifier rubyid_idx'>idx</span><span class='op'>+</span><span class='int'>1</span><span class='rbracket'>]</span>
<span class='kw'>return</span> <span class='id identifier rubyid_set'>set</span> <span class='kw'>unless</span> <span class='id identifier rubyid_len'>len</span>
<span class='id identifier rubyid_set'>set</span><span class='lbracket'>[</span><span class='id identifier rubyid_raw'>raw</span><span class='lbracket'>[</span><span class='id identifier rubyid_idx'>idx</span><span class='rbracket'>]</span><span class='rbracket'>]</span> <span class='op'>||=</span> <span class='lbracket'>[</span><span class='rbracket'>]</span>
<span class='id identifier rubyid_set'>set</span><span class='lbracket'>[</span><span class='id identifier rubyid_raw'>raw</span><span class='lbracket'>[</span><span class='id identifier rubyid_idx'>idx</span><span class='rbracket'>]</span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_push'>push</span><span class='lparen'>(</span><span class='id identifier rubyid_raw'>raw</span><span class='lbracket'>[</span><span class='id identifier rubyid_idx'>idx</span> <span class='op'>+</span> <span class='int'>2</span><span class='comma'>,</span> <span class='id identifier rubyid_len'>len</span><span class='rbracket'>]</span><span class='rparen'>)</span>
<span class='id identifier rubyid_idx'>idx</span> <span class='op'>+=</span> <span class='id identifier rubyid_len'>len</span> <span class='op'>+</span> <span class='int'>2</span>
<span class='kw'>end</span>
<span class='kw'>return</span> <span class='id identifier rubyid_set'>set</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="capture_icmp_echo_pack-instance_method">
#<strong>capture_icmp_echo_pack</strong>(id = nil, seq = nil, payload = nil) &#x21d2; <tt>Object</tt>
</h3><div class="docstring">
<div class="discussion">
<p>Intended to be used as the payload to an ICMP echo requests payload</p>
</div>
</div>
<div class="tags">
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
560
561
562
563
564</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/exploit/capture.rb', line 560</span>
<span class='kw'>def</span> <span class='id identifier rubyid_capture_icmp_echo_pack'>capture_icmp_echo_pack</span><span class='lparen'>(</span><span class='id identifier rubyid_id'>id</span><span class='op'>=</span><span class='kw'>nil</span><span class='comma'>,</span> <span class='id identifier rubyid_seq'>seq</span><span class='op'>=</span><span class='kw'>nil</span><span class='comma'>,</span> <span class='id identifier rubyid_payload'>payload</span><span class='op'>=</span><span class='kw'>nil</span><span class='rparen'>)</span>
<span class='id identifier rubyid_id'>id</span> <span class='op'>||=</span> <span class='id identifier rubyid_rand'>rand</span><span class='lparen'>(</span><span class='int'>0x10000</span><span class='rparen'>)</span>
<span class='id identifier rubyid_seq'>seq</span> <span class='op'>||=</span> <span class='id identifier rubyid_rand'>rand</span><span class='lparen'>(</span><span class='int'>0x10000</span><span class='rparen'>)</span>
<span class='lbracket'>[</span><span class='id identifier rubyid_id'>id</span><span class='comma'>,</span> <span class='id identifier rubyid_seq'>seq</span><span class='comma'>,</span> <span class='id identifier rubyid_payload'>payload</span><span class='period'>.</span><span class='id identifier rubyid_to_s'>to_s</span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_pack'>pack</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>nna*</span><span class='tstring_end'>&quot;</span></span><span class='rparen'>)</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="capture_icmp_echo_unpack-instance_method">
#<strong>capture_icmp_echo_unpack</strong>(data) &#x21d2; <tt>Object</tt>
</h3><div class="docstring">
<div class="discussion">
<p>Decodes and ICMP echo request or response.</p>
</div>
</div>
<div class="tags">
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
567
568
569</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/exploit/capture.rb', line 567</span>
<span class='kw'>def</span> <span class='id identifier rubyid_capture_icmp_echo_unpack'>capture_icmp_echo_unpack</span><span class='lparen'>(</span><span class='id identifier rubyid_data'>data</span><span class='rparen'>)</span>
<span class='id identifier rubyid_data'>data</span><span class='period'>.</span><span class='id identifier rubyid_unpack'>unpack</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>nna*</span><span class='tstring_end'>&quot;</span></span><span class='rparen'>)</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="capture_sendto-instance_method">
#<strong>capture_sendto</strong>(payload = &quot;&quot;, dhost = nil, bcast = false, dev = nil) &#x21d2; <tt>Object</tt>
</h3><div class="docstring">
<div class="discussion">
<p>Sends a payload to a given target using the pcap capture interface</p>
<h2 id="label-Parameters-3A">Parameters:</h2>
<dl class="rdoc-list note-list"><dt>payload</dt>
<dd>
<p>The payload String to send</p>
</dd><dt>dhost</dt>
<dd>
<p>the destination host to send to</p>
</dd><dt>bcast</dt>
<dd>
<p>set to true` to send to the broadcast address if necessary</p>
</dd><dt>dev</dt>
<dd>
<p>the name of the network interface to send the payload on</p>
</dd></dl>
<h2 id="label-Returns-3A">Returns:</h2>
<p>The number of bytes sent iff the payload was successfully sent/injected. false` otherwise</p>
</div>
</div>
<div class="tags">
<p class="tag_title">Raises:</p>
<ul class="raise">
<li>
<span class='type'>(<tt>RuntimeError</tt>)</span>
</li>
</ul>
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
244
245
246
247
248
249
250
251
252
253
254</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/exploit/capture.rb', line 244</span>
<span class='kw'>def</span> <span class='id identifier rubyid_capture_sendto'>capture_sendto</span><span class='lparen'>(</span><span class='id identifier rubyid_payload'>payload</span><span class='op'>=</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_end'>&quot;</span></span><span class='comma'>,</span> <span class='id identifier rubyid_dhost'>dhost</span><span class='op'>=</span><span class='kw'>nil</span><span class='comma'>,</span> <span class='id identifier rubyid_bcast'>bcast</span><span class='op'>=</span><span class='kw'>false</span><span class='comma'>,</span> <span class='id identifier rubyid_dev'>dev</span><span class='op'>=</span><span class='kw'>nil</span><span class='rparen'>)</span>
<span class='id identifier rubyid_raise'>raise</span> <span class='const'>RuntimeError</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Could not access the capture process (remember to open_pcap first!)</span><span class='tstring_end'>&quot;</span></span> <span class='kw'>unless</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_capture'>capture</span>
<span class='id identifier rubyid_raise'>raise</span> <span class='const'>RuntimeError</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Must specify a host to sendto</span><span class='tstring_end'>&quot;</span></span> <span class='kw'>unless</span> <span class='id identifier rubyid_dhost'>dhost</span>
<span class='id identifier rubyid_dev'>dev</span> <span class='op'>||=</span> <span class='id identifier rubyid_datastore'>datastore</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>INTERFACE</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span>
<span class='id identifier rubyid_dst_mac'>dst_mac</span><span class='comma'>,</span> <span class='id identifier rubyid_src_mac'>src_mac</span> <span class='op'>=</span> <span class='id identifier rubyid_lookup_eth'>lookup_eth</span><span class='lparen'>(</span><span class='id identifier rubyid_dhost'>dhost</span><span class='comma'>,</span> <span class='id identifier rubyid_dev'>dev</span><span class='rparen'>)</span>
<span class='kw'>if</span> <span class='id identifier rubyid_dst_mac'>dst_mac</span> <span class='op'>==</span> <span class='kw'>nil</span> <span class='kw'>and</span> <span class='kw'>not</span> <span class='id identifier rubyid_bcast'>bcast</span>
<span class='id identifier rubyid_vprint_error'>vprint_error</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Unable to determine the destination MAC for </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_dhost'>dhost</span><span class='embexpr_end'>}</span><span class='tstring_content'> on </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_dev'>dev</span><span class='embexpr_end'>}</span><span class='tstring_content'> and bcast is false</span><span class='tstring_end'>&quot;</span></span><span class='rparen'>)</span>
<span class='kw'>return</span> <span class='kw'>false</span>
<span class='kw'>end</span>
<span class='id identifier rubyid_inject_eth'>inject_eth</span><span class='lparen'>(</span><span class='symbol'>:payload</span> <span class='op'>=&gt;</span> <span class='id identifier rubyid_payload'>payload</span><span class='comma'>,</span> <span class='symbol'>:eth_daddr</span> <span class='op'>=&gt;</span> <span class='id identifier rubyid_dst_mac'>dst_mac</span><span class='comma'>,</span> <span class='symbol'>:eth_saddr</span> <span class='op'>=&gt;</span> <span class='id identifier rubyid_src_mac'>src_mac</span><span class='rparen'>)</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="check_pcaprub_loaded-instance_method">
#<strong>check_pcaprub_loaded</strong> &#x21d2; <tt>Object</tt>
</h3><table class="source_code">
<tr>
<td>
<pre class="lines">
393
394
395
396
397
398
399
400
401
402
403</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/exploit/capture.rb', line 393</span>
<span class='kw'>def</span> <span class='id identifier rubyid_check_pcaprub_loaded'>check_pcaprub_loaded</span>
<span class='kw'>if</span> <span class='kw'>not</span> <span class='ivar'>@pcaprub_loaded</span>
<span class='id identifier rubyid_print_status'>print_status</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>The Pcaprub module is not available: </span><span class='embexpr_beg'>#{</span><span class='ivar'>@pcaprub_error</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span><span class='rparen'>)</span>
<span class='id identifier rubyid_raise'>raise</span> <span class='const'>RuntimeError</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Pcaprub not available</span><span class='tstring_end'>&quot;</span></span>
<span class='kw'>elsif</span> <span class='kw'>not</span> <span class='ivar'>@network_interface_loaded</span>
<span class='id identifier rubyid_print_status'>print_status</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>The NetworkInterface module is not available: </span><span class='embexpr_beg'>#{</span><span class='ivar'>@network_interface_error</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span><span class='rparen'>)</span>
<span class='id identifier rubyid_raise'>raise</span> <span class='const'>RuntimeError</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>NetworkInterface not available</span><span class='tstring_end'>&quot;</span></span>
<span class='kw'>else</span>
<span class='kw'>true</span>
<span class='kw'>end</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="close_pcap-instance_method">
#<strong>close_pcap</strong> &#x21d2; <tt>Object</tt>
</h3><table class="source_code">
<tr>
<td>
<pre class="lines">
141
142
143
144
145</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/exploit/capture.rb', line 141</span>
<span class='kw'>def</span> <span class='id identifier rubyid_close_pcap'>close_pcap</span>
<span class='kw'>return</span> <span class='kw'>unless</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_capture'>capture</span>
<span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_capture'>capture</span> <span class='op'>=</span> <span class='kw'>nil</span>
<span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_arp_capture'>arp_capture</span> <span class='op'>=</span> <span class='kw'>nil</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="each_packet-instance_method">
#<strong>each_packet</strong> &#x21d2; <tt>Object</tt>
</h3><div class="docstring">
<div class="discussion">
<p>Loop through each packet</p>
</div>
</div>
<div class="tags">
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
166
167
168
169
170
171
172
173
174</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/exploit/capture.rb', line 166</span>
<span class='kw'>def</span> <span class='id identifier rubyid_each_packet'>each_packet</span>
<span class='kw'>return</span> <span class='kw'>unless</span> <span class='id identifier rubyid_capture'>capture</span>
<span class='ivar'>@capture_count</span> <span class='op'>||=</span> <span class='int'>0</span>
<span class='id identifier rubyid_capture'>capture</span><span class='period'>.</span><span class='id identifier rubyid_each'>each</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_pkt'>pkt</span><span class='op'>|</span>
<span class='kw'>yield</span><span class='lparen'>(</span><span class='id identifier rubyid_pkt'>pkt</span><span class='rparen'>)</span>
<span class='ivar'>@capture_count</span> <span class='op'>+=</span> <span class='int'>1</span>
<span class='kw'>end</span>
<span class='ivar'>@capture_count</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="expire_arpcache-instance_method">
#<strong>expire_arpcache</strong> &#x21d2; <tt>Object</tt>
</h3><div class="docstring">
<div class="discussion">
<p>Allow modules to reset their arp caches arbitrarily.</p>
</div>
</div>
<div class="tags">
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
384
385
386</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/exploit/capture.rb', line 384</span>
<span class='kw'>def</span> <span class='id identifier rubyid_expire_arpcache'>expire_arpcache</span>
<span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_arp_cache'>arp_cache</span> <span class='op'>=</span> <span class='lbrace'>{</span><span class='rbrace'>}</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="get_interface_guid-instance_method">
#<strong>get_interface_guid</strong>(dev) &#x21d2; <tt>Object</tt>
</h3><div class="docstring">
<div class="discussion">
<p>This function is useful only on windows where pcaprub use the GUID</p>
</div>
</div>
<div class="tags">
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/exploit/capture.rb', line 460</span>
<span class='kw'>def</span> <span class='id identifier rubyid_get_interface_guid'>get_interface_guid</span><span class='lparen'>(</span><span class='id identifier rubyid_dev'>dev</span><span class='rparen'>)</span>
<span class='id identifier rubyid_check_pcaprub_loaded'>check_pcaprub_loaded</span>
<span class='kw'>if</span> <span class='const'>RUBY_PLATFORM</span> <span class='op'>==</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>i386-mingw32</span><span class='tstring_end'>&quot;</span></span>
<span class='kw'>if</span> <span class='id identifier rubyid_dev'>dev</span><span class='period'>.</span><span class='id identifier rubyid_to_s'>to_s</span> <span class='op'>=~</span> <span class='tstring'><span class='regexp_beg'>/</span><span class='tstring_content'>^[0-9]{1,2}$</span><span class='regexp_end'>/</span></span>
<span class='kw'>if</span> <span class='id identifier rubyid_is_interface?'>is_interface?</span><span class='lparen'>(</span><span class='id identifier rubyid_dev'>dev</span><span class='rparen'>)</span>
<span class='const'>NetworkInterface</span><span class='period'>.</span><span class='id identifier rubyid_interfaces'>interfaces</span><span class='lbracket'>[</span><span class='lparen'>(</span><span class='id identifier rubyid_dev'>dev</span><span class='period'>.</span><span class='id identifier rubyid_to_i'>to_i</span><span class='rparen'>)</span> <span class='op'>-</span> <span class='int'>1</span><span class='rbracket'>]</span>
<span class='kw'>else</span>
<span class='kw'>return</span> <span class='id identifier rubyid_dev'>dev</span>
<span class='kw'>end</span>
<span class='kw'>else</span>
<span class='kw'>return</span> <span class='id identifier rubyid_dev'>dev</span>
<span class='kw'>end</span>
<span class='kw'>else</span> <span class='comment'>#Non windows
</span> <span class='kw'>return</span> <span class='id identifier rubyid_dev'>dev</span>
<span class='kw'>end</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="get_ipv4_addr-instance_method">
#<strong>get_ipv4_addr</strong>(dev, num = 0) &#x21d2; <tt>Object</tt>
</h3><div class="docstring">
<div class="discussion">
</div>
</div>
<div class="tags">
<p class="tag_title">Raises:</p>
<ul class="raise">
<li>
<span class='type'>(<tt>RuntimeError</tt>)</span>
</li>
</ul>
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
494
495
496
497
498
499
500
501
502</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/exploit/capture.rb', line 494</span>
<span class='kw'>def</span> <span class='id identifier rubyid_get_ipv4_addr'>get_ipv4_addr</span><span class='lparen'>(</span><span class='id identifier rubyid_dev'>dev</span><span class='comma'>,</span> <span class='id identifier rubyid_num'>num</span><span class='op'>=</span><span class='int'>0</span><span class='rparen'>)</span>
<span class='id identifier rubyid_check_pcaprub_loaded'>check_pcaprub_loaded</span>
<span class='id identifier rubyid_dev'>dev</span> <span class='op'>=</span> <span class='id identifier rubyid_get_interface_guid'>get_interface_guid</span><span class='lparen'>(</span><span class='id identifier rubyid_dev'>dev</span><span class='rparen'>)</span>
<span class='id identifier rubyid_addrs'>addrs</span> <span class='op'>=</span> <span class='const'>NetworkInterface</span><span class='period'>.</span><span class='id identifier rubyid_addresses'>addresses</span><span class='lparen'>(</span><span class='id identifier rubyid_dev'>dev</span><span class='rparen'>)</span>
<span class='id identifier rubyid_raise'>raise</span> <span class='const'>RuntimeError</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Interface </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_dev'>dev</span><span class='embexpr_end'>}</span><span class='tstring_content'> does not exist</span><span class='tstring_end'>&quot;</span></span> <span class='kw'>if</span> <span class='op'>!</span><span class='id identifier rubyid_addrs'>addrs</span>
<span class='id identifier rubyid_raise'>raise</span> <span class='const'>RuntimeError</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Interface </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_dev'>dev</span><span class='embexpr_end'>}</span><span class='tstring_content'> does not have an ipv4 address at position </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_num'>num</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span> <span class='kw'>if</span> <span class='id identifier rubyid_addrs'>addrs</span><span class='lbracket'>[</span><span class='const'>NetworkInterface</span><span class='op'>::</span><span class='const'>AF_INET</span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_length'>length</span> <span class='op'>&lt;</span> <span class='id identifier rubyid_num'>num</span> <span class='op'>+</span> <span class='int'>1</span>
<span class='id identifier rubyid_raise'>raise</span> <span class='const'>RuntimeError</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Cannot get the IPv4 address for interface </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_dev'>dev</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span> <span class='kw'>if</span> <span class='op'>!</span><span class='id identifier rubyid_addrs'>addrs</span><span class='lbracket'>[</span><span class='const'>NetworkInterface</span><span class='op'>::</span><span class='const'>AF_INET</span><span class='rbracket'>]</span><span class='lbracket'>[</span><span class='id identifier rubyid_num'>num</span><span class='rbracket'>]</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>addr</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span>
<span class='id identifier rubyid_addrs'>addrs</span><span class='lbracket'>[</span><span class='const'>NetworkInterface</span><span class='op'>::</span><span class='const'>AF_INET</span><span class='rbracket'>]</span><span class='lbracket'>[</span><span class='id identifier rubyid_num'>num</span><span class='rbracket'>]</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>addr</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="get_ipv4_addr_count-instance_method">
#<strong>get_ipv4_addr_count</strong>(dev) &#x21d2; <tt>Object</tt>
</h3><div class="docstring">
<div class="discussion">
</div>
</div>
<div class="tags">
<p class="tag_title">Raises:</p>
<ul class="raise">
<li>
<span class='type'>(<tt>RuntimeError</tt>)</span>
</li>
</ul>
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
486
487
488
489
490
491
492</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/exploit/capture.rb', line 486</span>
<span class='kw'>def</span> <span class='id identifier rubyid_get_ipv4_addr_count'>get_ipv4_addr_count</span><span class='lparen'>(</span><span class='id identifier rubyid_dev'>dev</span><span class='rparen'>)</span>
<span class='id identifier rubyid_check_pcaprub_loaded'>check_pcaprub_loaded</span>
<span class='id identifier rubyid_dev'>dev</span> <span class='op'>=</span> <span class='id identifier rubyid_get_interface_guid'>get_interface_guid</span><span class='lparen'>(</span><span class='id identifier rubyid_dev'>dev</span><span class='rparen'>)</span>
<span class='id identifier rubyid_addrs'>addrs</span> <span class='op'>=</span> <span class='const'>NetworkInterface</span><span class='period'>.</span><span class='id identifier rubyid_addresses'>addresses</span><span class='lparen'>(</span><span class='id identifier rubyid_dev'>dev</span><span class='rparen'>)</span>
<span class='id identifier rubyid_raise'>raise</span> <span class='const'>RuntimeError</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Interface </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_dev'>dev</span><span class='embexpr_end'>}</span><span class='tstring_content'> does not exist</span><span class='tstring_end'>&quot;</span></span> <span class='kw'>if</span> <span class='op'>!</span><span class='id identifier rubyid_addrs'>addrs</span>
<span class='id identifier rubyid_addrs'>addrs</span><span class='lbracket'>[</span><span class='const'>NetworkInterface</span><span class='op'>::</span><span class='const'>AF_INET</span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_length'>length</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="get_ipv4_broadcast-instance_method">
#<strong>get_ipv4_broadcast</strong>(dev, num = 0) &#x21d2; <tt>Object</tt>
</h3><div class="docstring">
<div class="discussion">
</div>
</div>
<div class="tags">
<p class="tag_title">Raises:</p>
<ul class="raise">
<li>
<span class='type'>(<tt>RuntimeError</tt>)</span>
</li>
</ul>
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
514
515
516
517
518
519
520
521
522</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/exploit/capture.rb', line 514</span>
<span class='kw'>def</span> <span class='id identifier rubyid_get_ipv4_broadcast'>get_ipv4_broadcast</span><span class='lparen'>(</span><span class='id identifier rubyid_dev'>dev</span><span class='comma'>,</span> <span class='id identifier rubyid_num'>num</span><span class='op'>=</span><span class='int'>0</span><span class='rparen'>)</span>
<span class='id identifier rubyid_check_pcaprub_loaded'>check_pcaprub_loaded</span>
<span class='id identifier rubyid_dev'>dev</span> <span class='op'>=</span> <span class='id identifier rubyid_get_interface_guid'>get_interface_guid</span><span class='lparen'>(</span><span class='id identifier rubyid_dev'>dev</span><span class='rparen'>)</span>
<span class='id identifier rubyid_addrs'>addrs</span> <span class='op'>=</span> <span class='const'>NetworkInterface</span><span class='period'>.</span><span class='id identifier rubyid_addresses'>addresses</span><span class='lparen'>(</span><span class='id identifier rubyid_dev'>dev</span><span class='rparen'>)</span>
<span class='id identifier rubyid_raise'>raise</span> <span class='const'>RuntimeError</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Interface </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_dev'>dev</span><span class='embexpr_end'>}</span><span class='tstring_content'> do not exists</span><span class='tstring_end'>&quot;</span></span> <span class='kw'>if</span> <span class='op'>!</span><span class='id identifier rubyid_addrs'>addrs</span>
<span class='id identifier rubyid_raise'>raise</span> <span class='const'>RuntimeError</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Interface </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_dev'>dev</span><span class='embexpr_end'>}</span><span class='tstring_content'> do not have an ipv4 address at position </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_num'>num</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span> <span class='kw'>if</span> <span class='id identifier rubyid_addrs'>addrs</span><span class='lbracket'>[</span><span class='const'>NetworkInterface</span><span class='op'>::</span><span class='const'>AF_INET</span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_length'>length</span> <span class='op'>&lt;</span> <span class='id identifier rubyid_num'>num</span> <span class='op'>+</span> <span class='int'>1</span>
<span class='id identifier rubyid_raise'>raise</span> <span class='const'>RuntimeError</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Cannot get IPv4 broadcast address for interface </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_dev'>dev</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span> <span class='kw'>if</span> <span class='op'>!</span><span class='id identifier rubyid_addrs'>addrs</span><span class='lbracket'>[</span><span class='const'>NetworkInterface</span><span class='op'>::</span><span class='const'>AF_INET</span><span class='rbracket'>]</span><span class='lbracket'>[</span><span class='id identifier rubyid_num'>num</span><span class='rbracket'>]</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>broadcast</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span>
<span class='id identifier rubyid_addrs'>addrs</span><span class='lbracket'>[</span><span class='const'>NetworkInterface</span><span class='op'>::</span><span class='const'>AF_INET</span><span class='rbracket'>]</span><span class='lbracket'>[</span><span class='id identifier rubyid_num'>num</span><span class='rbracket'>]</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>broadcast</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="get_ipv4_netmask-instance_method">
#<strong>get_ipv4_netmask</strong>(dev, num = 0) &#x21d2; <tt>Object</tt>
</h3><div class="docstring">
<div class="discussion">
</div>
</div>
<div class="tags">
<p class="tag_title">Raises:</p>
<ul class="raise">
<li>
<span class='type'>(<tt>RuntimeError</tt>)</span>
</li>
</ul>
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
504
505
506
507
508
509
510
511
512</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/exploit/capture.rb', line 504</span>
<span class='kw'>def</span> <span class='id identifier rubyid_get_ipv4_netmask'>get_ipv4_netmask</span><span class='lparen'>(</span><span class='id identifier rubyid_dev'>dev</span><span class='comma'>,</span> <span class='id identifier rubyid_num'>num</span><span class='op'>=</span><span class='int'>0</span><span class='rparen'>)</span>
<span class='id identifier rubyid_check_pcaprub_loaded'>check_pcaprub_loaded</span>
<span class='id identifier rubyid_dev'>dev</span> <span class='op'>=</span> <span class='id identifier rubyid_get_interface_guid'>get_interface_guid</span><span class='lparen'>(</span><span class='id identifier rubyid_dev'>dev</span><span class='rparen'>)</span>
<span class='id identifier rubyid_addrs'>addrs</span> <span class='op'>=</span> <span class='const'>NetworkInterface</span><span class='period'>.</span><span class='id identifier rubyid_addresses'>addresses</span><span class='lparen'>(</span><span class='id identifier rubyid_dev'>dev</span><span class='rparen'>)</span>
<span class='id identifier rubyid_raise'>raise</span> <span class='const'>RuntimeError</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Interface </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_dev'>dev</span><span class='embexpr_end'>}</span><span class='tstring_content'> does not exist</span><span class='tstring_end'>&quot;</span></span> <span class='kw'>if</span> <span class='op'>!</span><span class='id identifier rubyid_addrs'>addrs</span>
<span class='id identifier rubyid_raise'>raise</span> <span class='const'>RuntimeError</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Interface </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_dev'>dev</span><span class='embexpr_end'>}</span><span class='tstring_content'> does not have an ipv4 address at position </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_num'>num</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span> <span class='kw'>if</span> <span class='id identifier rubyid_addrs'>addrs</span><span class='lbracket'>[</span><span class='const'>NetworkInterface</span><span class='op'>::</span><span class='const'>AF_INET</span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_length'>length</span> <span class='op'>&lt;</span> <span class='id identifier rubyid_num'>num</span> <span class='op'>+</span> <span class='int'>1</span>
<span class='id identifier rubyid_raise'>raise</span> <span class='const'>RuntimeError</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Cannot get IPv4 netmask for interface </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_dev'>dev</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span> <span class='kw'>if</span> <span class='op'>!</span><span class='id identifier rubyid_addrs'>addrs</span><span class='lbracket'>[</span><span class='const'>NetworkInterface</span><span class='op'>::</span><span class='const'>AF_INET</span><span class='rbracket'>]</span><span class='lbracket'>[</span><span class='id identifier rubyid_num'>num</span><span class='rbracket'>]</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>netmask</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span>
<span class='id identifier rubyid_addrs'>addrs</span><span class='lbracket'>[</span><span class='const'>NetworkInterface</span><span class='op'>::</span><span class='const'>AF_INET</span><span class='rbracket'>]</span><span class='lbracket'>[</span><span class='id identifier rubyid_num'>num</span><span class='rbracket'>]</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>netmask</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="get_ipv6_addr-instance_method">
#<strong>get_ipv6_addr</strong>(dev, num = 0) &#x21d2; <tt>Object</tt>
</h3><div class="docstring">
<div class="discussion">
<p>NOTE: IPv6 is not implemented on Windows</p>
</div>
</div>
<div class="tags">
<p class="tag_title">Raises:</p>
<ul class="raise">
<li>
<span class='type'>(<tt>RuntimeError</tt>)</span>
</li>
</ul>
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
534
535
536
537
538
539
540
541
542
543</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/exploit/capture.rb', line 534</span>
<span class='kw'>def</span> <span class='id identifier rubyid_get_ipv6_addr'>get_ipv6_addr</span><span class='lparen'>(</span><span class='id identifier rubyid_dev'>dev</span><span class='comma'>,</span> <span class='id identifier rubyid_num'>num</span><span class='op'>=</span><span class='int'>0</span><span class='rparen'>)</span>
<span class='id identifier rubyid_check_pcaprub_loaded'>check_pcaprub_loaded</span>
<span class='id identifier rubyid_dev'>dev</span> <span class='op'>=</span> <span class='id identifier rubyid_get_interface_guid'>get_interface_guid</span><span class='lparen'>(</span><span class='id identifier rubyid_dev'>dev</span><span class='rparen'>)</span>
<span class='id identifier rubyid_raise'>raise</span> <span class='const'>RuntimeError</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>IPv6 information is not available on this platform</span><span class='tstring_end'>&quot;</span></span> <span class='kw'>unless</span> <span class='op'>::</span><span class='const'>NetworkInterface</span><span class='period'>.</span><span class='id identifier rubyid_const_defined?'>const_defined?</span><span class='lparen'>(</span><span class='symbol'>:AF_INET6</span><span class='rparen'>)</span>
<span class='id identifier rubyid_addrs'>addrs</span> <span class='op'>=</span> <span class='const'>NetworkInterface</span><span class='period'>.</span><span class='id identifier rubyid_addresses'>addresses</span><span class='lparen'>(</span><span class='id identifier rubyid_dev'>dev</span><span class='rparen'>)</span>
<span class='id identifier rubyid_raise'>raise</span> <span class='const'>RuntimeError</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Interface </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_dev'>dev</span><span class='embexpr_end'>}</span><span class='tstring_content'> do not exists</span><span class='tstring_end'>&quot;</span></span> <span class='kw'>if</span> <span class='op'>!</span><span class='id identifier rubyid_addrs'>addrs</span>
<span class='id identifier rubyid_raise'>raise</span> <span class='const'>RuntimeError</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Interface </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_dev'>dev</span><span class='embexpr_end'>}</span><span class='tstring_content'> do not have an ipv6 address at position </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_num'>num</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span> <span class='kw'>if</span> <span class='id identifier rubyid_addrs'>addrs</span><span class='lbracket'>[</span><span class='const'>NetworkInterface</span><span class='op'>::</span><span class='const'>AF_INET6</span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_length'>length</span> <span class='op'>&lt;</span> <span class='id identifier rubyid_num'>num</span> <span class='op'>+</span> <span class='int'>1</span>
<span class='id identifier rubyid_raise'>raise</span> <span class='const'>RuntimeError</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Cannot get ipv6 address for interface </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_dev'>dev</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span> <span class='kw'>if</span> <span class='op'>!</span><span class='id identifier rubyid_addrs'>addrs</span><span class='lbracket'>[</span><span class='const'>NetworkInterface</span><span class='op'>::</span><span class='const'>AF_INET6</span><span class='rbracket'>]</span><span class='lbracket'>[</span><span class='id identifier rubyid_num'>num</span><span class='rbracket'>]</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>addr</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span>
<span class='id identifier rubyid_addrs'>addrs</span><span class='lbracket'>[</span><span class='const'>NetworkInterface</span><span class='op'>::</span><span class='const'>AF_INET6</span><span class='rbracket'>]</span><span class='lbracket'>[</span><span class='id identifier rubyid_num'>num</span><span class='rbracket'>]</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>addr</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_gsub'>gsub</span><span class='lparen'>(</span><span class='tstring'><span class='regexp_beg'>/</span><span class='tstring_content'>%(.)*$</span><span class='regexp_end'>/</span></span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="get_ipv6_addr_count-instance_method">
#<strong>get_ipv6_addr_count</strong>(dev) &#x21d2; <tt>Object</tt>
</h3><div class="docstring">
<div class="discussion">
</div>
</div>
<div class="tags">
<p class="tag_title">Raises:</p>
<ul class="raise">
<li>
<span class='type'>(<tt>RuntimeError</tt>)</span>
</li>
</ul>
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
524
525
526
527
528
529
530
531</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/exploit/capture.rb', line 524</span>
<span class='kw'>def</span> <span class='id identifier rubyid_get_ipv6_addr_count'>get_ipv6_addr_count</span><span class='lparen'>(</span><span class='id identifier rubyid_dev'>dev</span><span class='rparen'>)</span>
<span class='id identifier rubyid_check_pcaprub_loaded'>check_pcaprub_loaded</span>
<span class='id identifier rubyid_dev'>dev</span> <span class='op'>=</span> <span class='id identifier rubyid_get_interface_guid'>get_interface_guid</span><span class='lparen'>(</span><span class='id identifier rubyid_dev'>dev</span><span class='rparen'>)</span>
<span class='id identifier rubyid_raise'>raise</span> <span class='const'>RuntimeError</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>IPv6 information is not available on this platform</span><span class='tstring_end'>&quot;</span></span> <span class='kw'>unless</span> <span class='op'>::</span><span class='const'>NetworkInterface</span><span class='period'>.</span><span class='id identifier rubyid_const_defined?'>const_defined?</span><span class='lparen'>(</span><span class='symbol'>:AF_INET6</span><span class='rparen'>)</span>
<span class='id identifier rubyid_addrs'>addrs</span> <span class='op'>=</span> <span class='const'>NetworkInterface</span><span class='period'>.</span><span class='id identifier rubyid_addresses'>addresses</span><span class='lparen'>(</span><span class='id identifier rubyid_dev'>dev</span><span class='rparen'>)</span>
<span class='id identifier rubyid_raise'>raise</span> <span class='const'>RuntimeError</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Interface </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_dev'>dev</span><span class='embexpr_end'>}</span><span class='tstring_content'> do not exists</span><span class='tstring_end'>&quot;</span></span> <span class='kw'>if</span> <span class='op'>!</span><span class='id identifier rubyid_addrs'>addrs</span>
<span class='id identifier rubyid_addrs'>addrs</span><span class='lbracket'>[</span><span class='const'>NetworkInterface</span><span class='op'>::</span><span class='const'>AF_INET6</span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_length'>length</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="get_ipv6_netmask-instance_method">
#<strong>get_ipv6_netmask</strong>(dev, num = 0) &#x21d2; <tt>Object</tt>
</h3><div class="docstring">
<div class="discussion">
</div>
</div>
<div class="tags">
<p class="tag_title">Raises:</p>
<ul class="raise">
<li>
<span class='type'>(<tt>RuntimeError</tt>)</span>
</li>
</ul>
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
545
546
547
548
549
550
551
552
553
554</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/exploit/capture.rb', line 545</span>
<span class='kw'>def</span> <span class='id identifier rubyid_get_ipv6_netmask'>get_ipv6_netmask</span><span class='lparen'>(</span><span class='id identifier rubyid_dev'>dev</span><span class='comma'>,</span> <span class='id identifier rubyid_num'>num</span><span class='op'>=</span><span class='int'>0</span><span class='rparen'>)</span>
<span class='id identifier rubyid_check_pcaprub_loaded'>check_pcaprub_loaded</span>
<span class='id identifier rubyid_dev'>dev</span> <span class='op'>=</span> <span class='id identifier rubyid_get_interface_guid'>get_interface_guid</span><span class='lparen'>(</span><span class='id identifier rubyid_dev'>dev</span><span class='rparen'>)</span>
<span class='id identifier rubyid_raise'>raise</span> <span class='const'>RuntimeError</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>IPv6 information is not available on this platform</span><span class='tstring_end'>&quot;</span></span> <span class='kw'>unless</span> <span class='op'>::</span><span class='const'>NetworkInterface</span><span class='period'>.</span><span class='id identifier rubyid_const_defined?'>const_defined?</span><span class='lparen'>(</span><span class='symbol'>:AF_INET6</span><span class='rparen'>)</span>
<span class='id identifier rubyid_addrs'>addrs</span> <span class='op'>=</span> <span class='const'>NetworkInterface</span><span class='period'>.</span><span class='id identifier rubyid_addresses'>addresses</span><span class='lparen'>(</span><span class='id identifier rubyid_dev'>dev</span><span class='rparen'>)</span>
<span class='id identifier rubyid_raise'>raise</span> <span class='const'>RuntimeError</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Interface </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_dev'>dev</span><span class='embexpr_end'>}</span><span class='tstring_content'> do not exists</span><span class='tstring_end'>&quot;</span></span> <span class='kw'>if</span> <span class='op'>!</span><span class='id identifier rubyid_addrs'>addrs</span>
<span class='id identifier rubyid_raise'>raise</span> <span class='const'>RuntimeError</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Interface </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_dev'>dev</span><span class='embexpr_end'>}</span><span class='tstring_content'> do not have an ipv6 address at position </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_num'>num</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span> <span class='kw'>if</span> <span class='id identifier rubyid_addrs'>addrs</span><span class='lbracket'>[</span><span class='const'>NetworkInterface</span><span class='op'>::</span><span class='const'>AF_INET6</span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_length'>length</span> <span class='op'>&lt;</span> <span class='id identifier rubyid_num'>num</span> <span class='op'>+</span> <span class='int'>1</span>
<span class='id identifier rubyid_raise'>raise</span> <span class='const'>RuntimeError</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Cannot get ipv6 netmask address for interface </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_dev'>dev</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span> <span class='kw'>if</span> <span class='op'>!</span><span class='id identifier rubyid_addrs'>addrs</span><span class='lbracket'>[</span><span class='const'>NetworkInterface</span><span class='op'>::</span><span class='const'>AF_INET6</span><span class='rbracket'>]</span><span class='lbracket'>[</span><span class='id identifier rubyid_num'>num</span><span class='rbracket'>]</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>netmask</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span>
<span class='id identifier rubyid_addrs'>addrs</span><span class='lbracket'>[</span><span class='const'>NetworkInterface</span><span class='op'>::</span><span class='const'>AF_INET6</span><span class='rbracket'>]</span><span class='lbracket'>[</span><span class='id identifier rubyid_num'>num</span><span class='rbracket'>]</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>netmask</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="get_mac-instance_method">
#<strong>get_mac</strong>(dev) &#x21d2; <tt>Object</tt>
</h3><div class="docstring">
<div class="discussion">
</div>
</div>
<div class="tags">
<p class="tag_title">Raises:</p>
<ul class="raise">
<li>
<span class='type'>(<tt>RuntimeError</tt>)</span>
</li>
</ul>
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
477
478
479
480
481
482
483
484</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/exploit/capture.rb', line 477</span>
<span class='kw'>def</span> <span class='id identifier rubyid_get_mac'>get_mac</span><span class='lparen'>(</span><span class='id identifier rubyid_dev'>dev</span><span class='rparen'>)</span>
<span class='id identifier rubyid_check_pcaprub_loaded'>check_pcaprub_loaded</span>
<span class='id identifier rubyid_dev'>dev</span> <span class='op'>=</span> <span class='id identifier rubyid_get_interface_guid'>get_interface_guid</span><span class='lparen'>(</span><span class='id identifier rubyid_dev'>dev</span><span class='rparen'>)</span>
<span class='id identifier rubyid_addrs'>addrs</span> <span class='op'>=</span> <span class='const'>NetworkInterface</span><span class='period'>.</span><span class='id identifier rubyid_addresses'>addresses</span><span class='lparen'>(</span><span class='id identifier rubyid_dev'>dev</span><span class='rparen'>)</span>
<span class='id identifier rubyid_raise'>raise</span> <span class='const'>RuntimeError</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Interface </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_dev'>dev</span><span class='embexpr_end'>}</span><span class='tstring_content'> does not exist</span><span class='tstring_end'>&quot;</span></span> <span class='kw'>if</span> <span class='op'>!</span><span class='id identifier rubyid_addrs'>addrs</span>
<span class='id identifier rubyid_raise'>raise</span> <span class='const'>RuntimeError</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Cannot get mac address for interface </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_dev'>dev</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span> <span class='kw'>if</span> <span class='op'>!</span><span class='id identifier rubyid_addrs'>addrs</span><span class='lbracket'>[</span><span class='const'>NetworkInterface</span><span class='op'>::</span><span class='const'>AF_LINK</span><span class='rbracket'>]</span><span class='lbracket'>[</span><span class='int'>0</span><span class='rbracket'>]</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>addr</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span>
<span class='id identifier rubyid_addrs'>addrs</span><span class='lbracket'>[</span><span class='const'>NetworkInterface</span><span class='op'>::</span><span class='const'>AF_LINK</span><span class='rbracket'>]</span><span class='lbracket'>[</span><span class='int'>0</span><span class='rbracket'>]</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>addr</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="initialize-instance_method">
#<strong>initialize</strong>(info = {}) &#x21d2; <tt>Object</tt>
</h3><div class="docstring">
<div class="discussion">
<p>Initializes an instance of an exploit module that captures traffic</p>
</div>
</div>
<div class="tags">
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/exploit/capture.rb', line 23</span>
<span class='kw'>def</span> <span class='id identifier rubyid_initialize'>initialize</span><span class='lparen'>(</span><span class='id identifier rubyid_info'>info</span> <span class='op'>=</span> <span class='lbrace'>{</span><span class='rbrace'>}</span><span class='rparen'>)</span>
<span class='kw'>super</span>
<span class='id identifier rubyid_register_options'>register_options</span><span class='lparen'>(</span>
<span class='lbracket'>[</span>
<span class='const'><span class='object_link'><a href="../OptPath.html" title="Msf::OptPath (class)">OptPath</a></span></span><span class='period'>.</span><span class='id identifier rubyid_new'><span class='object_link'><a href="../OptBase.html#initialize-instance_method" title="Msf::OptBase#initialize (method)">new</a></span></span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>PCAPFILE</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span> <span class='lbracket'>[</span><span class='kw'>false</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>The name of the PCAP capture file to process</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span><span class='rparen'>)</span><span class='comma'>,</span>
<span class='const'><span class='object_link'><a href="../OptString.html" title="Msf::OptString (class)">OptString</a></span></span><span class='period'>.</span><span class='id identifier rubyid_new'><span class='object_link'><a href="../OptString.html#initialize-instance_method" title="Msf::OptString#initialize (method)">new</a></span></span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>INTERFACE</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span> <span class='lbracket'>[</span><span class='kw'>false</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>The name of the interface</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span><span class='rparen'>)</span><span class='comma'>,</span>
<span class='const'><span class='object_link'><a href="../OptString.html" title="Msf::OptString (class)">OptString</a></span></span><span class='period'>.</span><span class='id identifier rubyid_new'><span class='object_link'><a href="../OptString.html#initialize-instance_method" title="Msf::OptString#initialize (method)">new</a></span></span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>FILTER</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span> <span class='lbracket'>[</span><span class='kw'>false</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>The filter string for capturing traffic</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span><span class='rparen'>)</span><span class='comma'>,</span>
<span class='const'><span class='object_link'><a href="../OptInt.html" title="Msf::OptInt (class)">OptInt</a></span></span><span class='period'>.</span><span class='id identifier rubyid_new'><span class='object_link'><a href="../OptBase.html#initialize-instance_method" title="Msf::OptBase#initialize (method)">new</a></span></span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>SNAPLEN</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span> <span class='lbracket'>[</span><span class='kw'>true</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>The number of bytes to capture</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span> <span class='int'>65535</span><span class='rbracket'>]</span><span class='rparen'>)</span><span class='comma'>,</span>
<span class='const'><span class='object_link'><a href="../OptInt.html" title="Msf::OptInt (class)">OptInt</a></span></span><span class='period'>.</span><span class='id identifier rubyid_new'><span class='object_link'><a href="../OptBase.html#initialize-instance_method" title="Msf::OptBase#initialize (method)">new</a></span></span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>TIMEOUT</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span> <span class='lbracket'>[</span><span class='kw'>true</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>The number of seconds to wait for new data</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span> <span class='int'>500</span><span class='rbracket'>]</span><span class='rparen'>)</span><span class='comma'>,</span>
<span class='const'><span class='object_link'><a href="../Opt.html" title="Msf::Opt (module)">Opt</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="../Opt.html#RHOST-constant" title="Msf::Opt::RHOST (constant)">RHOST</a></span></span>
<span class='rbracket'>]</span><span class='comma'>,</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="../Exploit.html" title="Msf::Exploit (class)">Exploit</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="" title="Msf::Exploit::Capture (module)">Capture</a></span></span>
<span class='rparen'>)</span>
<span class='id identifier rubyid_register_advanced_options'>register_advanced_options</span><span class='lparen'>(</span>
<span class='lbracket'>[</span>
<span class='const'><span class='object_link'><a href="../OptInt.html" title="Msf::OptInt (class)">OptInt</a></span></span><span class='period'>.</span><span class='id identifier rubyid_new'><span class='object_link'><a href="../OptBase.html#initialize-instance_method" title="Msf::OptBase#initialize (method)">new</a></span></span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>SECRET</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span> <span class='lbracket'>[</span><span class='kw'>true</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>A 32-bit cookie for probe requests.</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>MSF!</span><span class='tstring_end'>&#39;</span></span><span class='period'>.</span><span class='id identifier rubyid_unpack'>unpack</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>N</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_first'>first</span><span class='rbracket'>]</span><span class='rparen'>)</span><span class='comma'>,</span>
<span class='const'><span class='object_link'><a href="../OptAddress.html" title="Msf::OptAddress (class)">OptAddress</a></span></span><span class='period'>.</span><span class='id identifier rubyid_new'><span class='object_link'><a href="../OptBase.html#initialize-instance_method" title="Msf::OptBase#initialize (method)">new</a></span></span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>GATEWAY_PROBE_HOST</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
<span class='lbracket'>[</span>
<span class='kw'>true</span><span class='comma'>,</span>
<span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>Send a TTL=1 random UDP datagram to this host to discover the default gateway\&#39;s MAC</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
<span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>8.8.8.8</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span><span class='rparen'>)</span><span class='comma'>,</span>
<span class='const'><span class='object_link'><a href="../OptPort.html" title="Msf::OptPort (class)">OptPort</a></span></span><span class='period'>.</span><span class='id identifier rubyid_new'><span class='object_link'><a href="../OptBase.html#initialize-instance_method" title="Msf::OptBase#initialize (method)">new</a></span></span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>GATEWAY_PROBE_PORT</span><span class='tstring_end'>&#39;</span></span><span class='comma'>,</span>
<span class='lbracket'>[</span>
<span class='kw'>false</span><span class='comma'>,</span>
<span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>The port on GATEWAY_PROBE_HOST to send a random UDP probe to (random if 0 or unset)</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span><span class='rparen'>)</span>
<span class='rbracket'>]</span><span class='comma'>,</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="../Exploit.html" title="Msf::Exploit (class)">Exploit</a></span></span><span class='op'>::</span><span class='const'><span class='object_link'><a href="" title="Msf::Exploit::Capture (module)">Capture</a></span></span>
<span class='rparen'>)</span>
<span class='kw'>begin</span>
<span class='id identifier rubyid_require'>require</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>packetfu</span><span class='tstring_end'>&#39;</span></span>
<span class='id identifier rubyid_require'>require</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>pcaprub</span><span class='tstring_end'>&#39;</span></span>
<span class='ivar'>@pcaprub_loaded</span> <span class='op'>=</span> <span class='kw'>true</span>
<span class='kw'>rescue</span> <span class='op'>::</span><span class='const'>LoadError</span> <span class='op'>=&gt;</span> <span class='id identifier rubyid_e'>e</span>
<span class='ivar'>@pcaprub_loaded</span> <span class='op'>=</span> <span class='kw'>false</span>
<span class='ivar'>@pcaprub_error</span> <span class='op'>=</span> <span class='id identifier rubyid_e'>e</span>
<span class='kw'>end</span>
<span class='kw'>begin</span>
<span class='id identifier rubyid_require'>require</span> <span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>network_interface</span><span class='tstring_end'>&#39;</span></span>
<span class='ivar'>@network_interface_loaded</span> <span class='op'>=</span> <span class='kw'>true</span>
<span class='kw'>rescue</span> <span class='op'>::</span><span class='const'>LoadError</span> <span class='op'>=&gt;</span> <span class='id identifier rubyid_e'>e</span>
<span class='ivar'>@network_interface_loaded</span> <span class='op'>=</span> <span class='kw'>false</span>
<span class='ivar'>@network_interface_error</span> <span class='op'>=</span> <span class='id identifier rubyid_e'>e</span>
<span class='kw'>end</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="inject-instance_method">
#<strong>inject</strong>(pkt = &quot;&quot;, pcap = self.capture) &#x21d2; <tt>Object</tt>
</h3><div class="docstring">
<div class="discussion">
<p>Injects a packet on the wire. For all injection-related functions, its on the module to open up a capture device first (this way, we dont needlessly spawn new capture devices).</p>
</div>
</div>
<div class="tags">
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
179
180
181
182
183
184
185
186</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/exploit/capture.rb', line 179</span>
<span class='kw'>def</span> <span class='id identifier rubyid_inject'>inject</span><span class='lparen'>(</span><span class='id identifier rubyid_pkt'>pkt</span><span class='op'>=</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_end'>&quot;</span></span><span class='comma'>,</span> <span class='id identifier rubyid_pcap'>pcap</span><span class='op'>=</span><span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_capture'>capture</span><span class='rparen'>)</span>
<span class='id identifier rubyid_check_pcaprub_loaded'>check_pcaprub_loaded</span>
<span class='kw'>if</span> <span class='kw'>not</span> <span class='id identifier rubyid_pcap'>pcap</span>
<span class='id identifier rubyid_raise'>raise</span> <span class='const'>RuntimeError</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Could not access the capture process (remember to open_pcap first!)</span><span class='tstring_end'>&quot;</span></span>
<span class='kw'>else</span>
<span class='id identifier rubyid_pcap'>pcap</span><span class='period'>.</span><span class='id identifier rubyid_inject'>inject</span><span class='lparen'>(</span><span class='id identifier rubyid_pkt'>pkt</span><span class='period'>.</span><span class='id identifier rubyid_to_s'>to_s</span><span class='rparen'>)</span> <span class='comment'># Can be a PacketFu Packet object or a pre-packed string
</span> <span class='kw'>end</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="inject_eth-instance_method">
#<strong>inject_eth</strong>(args = {}) &#x21d2; <tt>Object</tt>
</h3><div class="docstring">
<div class="discussion">
<p>Injects an Ethernet packet with an optional payload. The payload may be a regular PacketFu packet, an EthHeader, or a string.</p>
</div>
</div>
<div class="tags">
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/exploit/capture.rb', line 190</span>
<span class='kw'>def</span> <span class='id identifier rubyid_inject_eth'>inject_eth</span><span class='lparen'>(</span><span class='id identifier rubyid_args'>args</span><span class='op'>=</span><span class='lbrace'>{</span><span class='rbrace'>}</span><span class='rparen'>)</span>
<span class='id identifier rubyid_eth_daddr'>eth_daddr</span> <span class='op'>=</span> <span class='id identifier rubyid_args'>args</span><span class='lbracket'>[</span><span class='symbol'>:eth_daddr</span><span class='rbracket'>]</span> <span class='op'>||</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>ff:ff:ff:ff:ff:ff</span><span class='tstring_end'>&quot;</span></span>
<span class='id identifier rubyid_eth_saddr'>eth_saddr</span> <span class='op'>=</span> <span class='id identifier rubyid_args'>args</span><span class='lbracket'>[</span><span class='symbol'>:eth_saddr</span><span class='rbracket'>]</span> <span class='op'>||</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>00:00:00:00:00:00</span><span class='tstring_end'>&quot;</span></span>
<span class='id identifier rubyid_eth_type'>eth_type</span> <span class='op'>=</span> <span class='id identifier rubyid_args'>args</span><span class='lbracket'>[</span><span class='symbol'>:eth_type</span><span class='rbracket'>]</span> <span class='op'>||</span> <span class='int'>0x0800</span> <span class='comment'># IP default
</span> <span class='id identifier rubyid_payload'>payload</span> <span class='op'>=</span> <span class='id identifier rubyid_args'>args</span><span class='lbracket'>[</span><span class='symbol'>:payload</span><span class='rbracket'>]</span>
<span class='id identifier rubyid_pcap'>pcap</span> <span class='op'>=</span> <span class='id identifier rubyid_args'>args</span><span class='lbracket'>[</span><span class='symbol'>:pcap</span><span class='rbracket'>]</span> <span class='op'>||</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_capture'>capture</span>
<span class='id identifier rubyid_p'>p</span> <span class='op'>=</span> <span class='const'>PacketFu</span><span class='op'>::</span><span class='const'>EthPacket</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span>
<span class='id identifier rubyid_p'>p</span><span class='period'>.</span><span class='id identifier rubyid_eth_daddr'>eth_daddr</span> <span class='op'>=</span> <span class='id identifier rubyid_eth_daddr'>eth_daddr</span>
<span class='id identifier rubyid_p'>p</span><span class='period'>.</span><span class='id identifier rubyid_eth_saddr'>eth_saddr</span> <span class='op'>=</span> <span class='id identifier rubyid_eth_saddr'>eth_saddr</span>
<span class='id identifier rubyid_p'>p</span><span class='period'>.</span><span class='id identifier rubyid_eth_proto'>eth_proto</span> <span class='op'>=</span> <span class='id identifier rubyid_eth_type'>eth_type</span>
<span class='kw'>if</span> <span class='id identifier rubyid_payload'>payload</span>
<span class='kw'>if</span> <span class='id identifier rubyid_payload'>payload</span><span class='period'>.</span><span class='id identifier rubyid_kind_of?'>kind_of?</span> <span class='const'>PacketFu</span><span class='op'>::</span><span class='const'>EthPacket</span>
<span class='id identifier rubyid_p'>p</span><span class='period'>.</span><span class='id identifier rubyid_payload'>payload</span> <span class='op'>=</span> <span class='id identifier rubyid_payload'>payload</span><span class='period'>.</span><span class='id identifier rubyid_eth_header'>eth_header</span><span class='period'>.</span><span class='id identifier rubyid_body'>body</span>
<span class='kw'>elsif</span> <span class='id identifier rubyid_payload'>payload</span><span class='period'>.</span><span class='id identifier rubyid_kind_of?'>kind_of?</span> <span class='const'>PacketFu</span><span class='op'>::</span><span class='const'>EthHeader</span>
<span class='id identifier rubyid_p'>p</span><span class='period'>.</span><span class='id identifier rubyid_payload'>payload</span> <span class='op'>=</span> <span class='id identifier rubyid_payload'>payload</span><span class='period'>.</span><span class='id identifier rubyid_body'>body</span>
<span class='kw'>else</span>
<span class='id identifier rubyid_p'>p</span><span class='period'>.</span><span class='id identifier rubyid_payload'>payload</span> <span class='op'>=</span> <span class='id identifier rubyid_payload'>payload</span><span class='period'>.</span><span class='id identifier rubyid_to_s'>to_s</span>
<span class='kw'>end</span>
<span class='kw'>end</span>
<span class='id identifier rubyid_inject'>inject</span> <span class='id identifier rubyid_p'>p</span><span class='period'>.</span><span class='id identifier rubyid_to_s'>to_s</span><span class='comma'>,</span> <span class='id identifier rubyid_pcap'>pcap</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="inject_pcap-instance_method">
#<strong>inject_pcap</strong>(pcap_file, filter = nil, delay = 0, pcap = self.capture) &#x21d2; <tt>Object</tt>
</h3><table class="source_code">
<tr>
<td>
<pre class="lines">
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/exploit/capture.rb', line 212</span>
<span class='kw'>def</span> <span class='id identifier rubyid_inject_pcap'>inject_pcap</span><span class='lparen'>(</span><span class='id identifier rubyid_pcap_file'>pcap_file</span><span class='comma'>,</span> <span class='id identifier rubyid_filter'>filter</span><span class='op'>=</span><span class='kw'>nil</span><span class='comma'>,</span> <span class='id identifier rubyid_delay'>delay</span> <span class='op'>=</span> <span class='int'>0</span><span class='comma'>,</span> <span class='id identifier rubyid_pcap'>pcap</span><span class='op'>=</span><span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_capture'>capture</span><span class='rparen'>)</span>
<span class='id identifier rubyid_check_pcaprub_loaded'>check_pcaprub_loaded</span>
<span class='kw'>unless</span> <span class='id identifier rubyid_pcap'>pcap</span>
<span class='id identifier rubyid_raise'>raise</span> <span class='const'>RuntimeError</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Could not access the capture process (remember to open_pcap first!)</span><span class='tstring_end'>&quot;</span></span>
<span class='kw'>end</span>
<span class='kw'>if</span> <span class='lparen'>(</span><span class='kw'>not</span> <span class='const'>File</span><span class='period'>.</span><span class='id identifier rubyid_exist?'>exist?</span><span class='lparen'>(</span><span class='id identifier rubyid_pcap_file'>pcap_file</span><span class='rparen'>)</span><span class='rparen'>)</span>
<span class='id identifier rubyid_raise'>raise</span> <span class='const'>RuntimeError</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>The PCAP file </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_pcap_file'>pcap_file</span><span class='embexpr_end'>}</span><span class='tstring_content'> could not be found</span><span class='tstring_end'>&quot;</span></span>
<span class='kw'>end</span>
<span class='kw'>if</span> <span class='lparen'>(</span><span class='id identifier rubyid_pcap_file'>pcap_file</span><span class='period'>.</span><span class='id identifier rubyid_empty?'>empty?</span><span class='rparen'>)</span>
<span class='id identifier rubyid_raise'>raise</span> <span class='const'>RuntimeError</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>The PCAP file </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_pcap_file'>pcap_file</span><span class='embexpr_end'>}</span><span class='tstring_content'> is empty</span><span class='tstring_end'>&quot;</span></span>
<span class='kw'>end</span>
<span class='id identifier rubyid_capture_file'>capture_file</span> <span class='op'>=</span> <span class='op'>::</span><span class='const'>Pcap</span><span class='period'>.</span><span class='id identifier rubyid_open_offline'>open_offline</span><span class='lparen'>(</span><span class='id identifier rubyid_pcap_file'>pcap_file</span><span class='rparen'>)</span>
<span class='id identifier rubyid_capture_file'>capture_file</span><span class='period'>.</span><span class='id identifier rubyid_setfilter'>setfilter</span><span class='lparen'>(</span><span class='id identifier rubyid_filter'>filter</span><span class='rparen'>)</span> <span class='kw'>if</span> <span class='id identifier rubyid_filter'>filter</span>
<span class='kw'>while</span> <span class='lparen'>(</span><span class='id identifier rubyid_pkt'>pkt</span> <span class='op'>=</span> <span class='id identifier rubyid_capture_file'>capture_file</span><span class='period'>.</span><span class='id identifier rubyid_next'>next</span><span class='rparen'>)</span> <span class='kw'>do</span>
<span class='id identifier rubyid_pcap'>pcap</span><span class='period'>.</span><span class='id identifier rubyid_inject'>inject</span><span class='lparen'>(</span><span class='id identifier rubyid_pkt'>pkt</span><span class='rparen'>)</span>
<span class='const'><span class='object_link'><a href="../../Rex.html" title="Rex (module)">Rex</a></span></span><span class='period'>.</span><span class='id identifier rubyid_sleep'>sleep</span><span class='lparen'>(</span><span class='lparen'>(</span><span class='id identifier rubyid_delay'>delay</span> <span class='op'>*</span> <span class='float'>1.0</span><span class='rparen'>)</span><span class='op'>/</span><span class='int'>1000</span><span class='rparen'>)</span>
<span class='kw'>end</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="inject_reply-instance_method">
#<strong>inject_reply</strong>(proto = :udp, pcap = self.capture) &#x21d2; <tt>Object</tt>
</h3><div class="docstring">
<div class="discussion">
<p>The return value either be a PacketFu::Packet object, or nil</p>
</div>
</div>
<div class="tags">
<p class="tag_title">Raises:</p>
<ul class="raise">
<li>
<span class='type'>(<tt>RuntimeError</tt>)</span>
</li>
</ul>
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/exploit/capture.rb', line 257</span>
<span class='kw'>def</span> <span class='id identifier rubyid_inject_reply'>inject_reply</span><span class='lparen'>(</span><span class='id identifier rubyid_proto'>proto</span><span class='op'>=</span><span class='symbol'>:udp</span><span class='comma'>,</span> <span class='id identifier rubyid_pcap'>pcap</span><span class='op'>=</span><span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_capture'>capture</span><span class='rparen'>)</span>
<span class='comment'># Defaults to ~2 seconds
</span> <span class='id identifier rubyid_to'>to</span> <span class='op'>=</span> <span class='lparen'>(</span><span class='lparen'>(</span><span class='id identifier rubyid_datastore'>datastore</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>TIMEOUT</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span> <span class='op'>||</span> <span class='int'>500</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_to_f'>to_f</span> <span class='op'>*</span> <span class='int'>4</span><span class='rparen'>)</span> <span class='op'>/</span> <span class='float'>1000.0</span>
<span class='id identifier rubyid_raise'>raise</span> <span class='const'>RuntimeError</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Could not access the capture process (remember to open_pcap first!)</span><span class='tstring_end'>&quot;</span></span> <span class='kw'>if</span> <span class='kw'>not</span> <span class='id identifier rubyid_pcap'>pcap</span>
<span class='kw'>begin</span>
<span class='op'>::</span><span class='const'>Timeout</span><span class='period'>.</span><span class='id identifier rubyid_timeout'>timeout</span><span class='lparen'>(</span><span class='id identifier rubyid_to'>to</span><span class='rparen'>)</span> <span class='kw'>do</span>
<span class='id identifier rubyid_pcap'>pcap</span><span class='period'>.</span><span class='id identifier rubyid_each'>each</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_r'>r</span><span class='op'>|</span>
<span class='id identifier rubyid_packet'>packet</span> <span class='op'>=</span> <span class='const'>PacketFu</span><span class='op'>::</span><span class='const'>Packet</span><span class='period'>.</span><span class='id identifier rubyid_parse'>parse</span><span class='lparen'>(</span><span class='id identifier rubyid_r'>r</span><span class='rparen'>)</span>
<span class='kw'>next</span> <span class='kw'>unless</span> <span class='id identifier rubyid_packet'>packet</span><span class='period'>.</span><span class='id identifier rubyid_proto'>proto</span><span class='period'>.</span><span class='id identifier rubyid_map'>map</span> <span class='lbrace'>{</span> <span class='op'>|</span><span class='id identifier rubyid_x'>x</span><span class='op'>|</span> <span class='id identifier rubyid_x'>x</span><span class='period'>.</span><span class='id identifier rubyid_downcase'>downcase</span><span class='period'>.</span><span class='id identifier rubyid_to_sym'>to_sym</span> <span class='rbrace'>}</span><span class='period'>.</span><span class='id identifier rubyid_include?'>include?</span> <span class='id identifier rubyid_proto'>proto</span>
<span class='kw'>return</span> <span class='id identifier rubyid_packet'>packet</span>
<span class='kw'>end</span>
<span class='kw'>end</span>
<span class='kw'>rescue</span> <span class='op'>::</span><span class='const'>Timeout</span><span class='op'>::</span><span class='const'>Error</span>
<span class='kw'>end</span>
<span class='kw'>nil</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="is_interface?-instance_method">
#<strong>is_interface?</strong>(dev) &#x21d2; <tt>Boolean</tt>
</h3><div class="docstring">
<div class="discussion">
</div>
</div>
<div class="tags">
<p class="tag_title">Returns:</p>
<ul class="return">
<li>
<span class='type'>(<tt>Boolean</tt>)</span>
</li>
</ul>
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/exploit/capture.rb', line 440</span>
<span class='kw'>def</span> <span class='id identifier rubyid_is_interface?'>is_interface?</span><span class='lparen'>(</span><span class='id identifier rubyid_dev'>dev</span><span class='rparen'>)</span>
<span class='id identifier rubyid_check_pcaprub_loaded'>check_pcaprub_loaded</span>
<span class='kw'>if</span> <span class='const'>RUBY_PLATFORM</span> <span class='op'>==</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>i386-mingw32</span><span class='tstring_end'>&quot;</span></span>
<span class='kw'>if</span> <span class='id identifier rubyid_dev'>dev</span> <span class='op'>=~</span> <span class='tstring'><span class='regexp_beg'>/</span><span class='tstring_content'>\\Device\\NPF_\{[A-F0-9]{8}-[A-F0-9]{4}-[A-F0-9]{4}-[A-F0-9]{4}-[A-F0-9]{12}\}</span><span class='regexp_end'>/</span></span>
<span class='kw'>return</span> <span class='const'>NetworkInterface</span><span class='period'>.</span><span class='id identifier rubyid_interfaces'>interfaces</span><span class='period'>.</span><span class='id identifier rubyid_include?'>include?</span><span class='lparen'>(</span><span class='id identifier rubyid_dev'>dev</span><span class='rparen'>)</span>
<span class='kw'>elsif</span> <span class='id identifier rubyid_dev'>dev</span><span class='period'>.</span><span class='id identifier rubyid_to_s'>to_s</span> <span class='op'>=~</span> <span class='tstring'><span class='regexp_beg'>/</span><span class='tstring_content'>^[0-9]{1,2}$</span><span class='regexp_end'>/</span></span>
<span class='kw'>if</span> <span class='lparen'>(</span><span class='id identifier rubyid_dev'>dev</span><span class='period'>.</span><span class='id identifier rubyid_to_i'>to_i</span> <span class='op'>&lt;=</span> <span class='const'>NetworkInterface</span><span class='period'>.</span><span class='id identifier rubyid_interfaces'>interfaces</span><span class='period'>.</span><span class='id identifier rubyid_length'>length</span><span class='rparen'>)</span> <span class='kw'>and</span> <span class='lparen'>(</span><span class='id identifier rubyid_dev'>dev</span><span class='period'>.</span><span class='id identifier rubyid_to_i'>to_i</span> <span class='op'>&gt;=</span> <span class='int'>0</span><span class='rparen'>)</span>
<span class='kw'>return</span> <span class='kw'>true</span>
<span class='kw'>else</span>
<span class='kw'>return</span> <span class='kw'>false</span>
<span class='kw'>end</span>
<span class='kw'>else</span>
<span class='kw'>return</span> <span class='kw'>false</span>
<span class='kw'>end</span>
<span class='kw'>else</span>
<span class='kw'>return</span> <span class='const'>NetworkInterface</span><span class='period'>.</span><span class='id identifier rubyid_interfaces'>interfaces</span><span class='period'>.</span><span class='id identifier rubyid_include?'>include?</span><span class='lparen'>(</span><span class='id identifier rubyid_dev'>dev</span><span class='rparen'>)</span>
<span class='kw'>end</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="list_interfaces-instance_method">
#<strong>list_interfaces</strong> &#x21d2; <tt>Object</tt>
</h3><table class="source_code">
<tr>
<td>
<pre class="lines">
435
436
437
438</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/exploit/capture.rb', line 435</span>
<span class='kw'>def</span> <span class='id identifier rubyid_list_interfaces'>list_interfaces</span>
<span class='id identifier rubyid_check_pcaprub_loaded'>check_pcaprub_loaded</span>
<span class='const'>NetworkInterface</span><span class='period'>.</span><span class='id identifier rubyid_interfaces'>interfaces</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="lookup_eth-instance_method">
#<strong>lookup_eth</strong>(addr = nil, iface = nil) &#x21d2; <tt>Object</tt>
</h3><div class="docstring">
<div class="discussion">
<p>This ascertains the correct Ethernet addresses one should use to ensure injected IP packets actually get where they are going, and manages the self.arp_cache hash. It always uses self.arp_capture to inject and capture packets, and will always first fire off a UDP packet using the regular socket to learn the source hosts and gateways mac addresses.</p>
</div>
</div>
<div class="tags">
<p class="tag_title">Raises:</p>
<ul class="raise">
<li>
<span class='type'>(<tt>RuntimeError</tt>)</span>
</li>
</ul>
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/exploit/capture.rb', line 280</span>
<span class='kw'>def</span> <span class='id identifier rubyid_lookup_eth'>lookup_eth</span><span class='lparen'>(</span><span class='id identifier rubyid_addr'>addr</span><span class='op'>=</span><span class='kw'>nil</span><span class='comma'>,</span> <span class='id identifier rubyid_iface'>iface</span><span class='op'>=</span><span class='kw'>nil</span><span class='rparen'>)</span>
<span class='id identifier rubyid_raise'>raise</span> <span class='const'>RuntimeError</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Could not access the capture process.</span><span class='tstring_end'>&quot;</span></span> <span class='kw'>unless</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_arp_capture'>arp_capture</span>
<span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_arp_cache'>arp_cache</span> <span class='op'>||=</span> <span class='lbrace'>{</span><span class='rbrace'>}</span>
<span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_dst_cache'>dst_cache</span> <span class='op'>||=</span> <span class='lbrace'>{</span><span class='rbrace'>}</span>
<span class='kw'>return</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_dst_cache'>dst_cache</span><span class='lbracket'>[</span><span class='id identifier rubyid_addr'>addr</span><span class='rbracket'>]</span> <span class='kw'>if</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_dst_cache'>dst_cache</span><span class='lbracket'>[</span><span class='id identifier rubyid_addr'>addr</span><span class='rbracket'>]</span>
<span class='kw'>if</span> <span class='op'>!</span><span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_arp_cache'>arp_cache</span><span class='lbracket'>[</span><span class='const'><span class='object_link'><a href="../../Rex.html" title="Rex (module)">Rex</a></span></span><span class='op'>::</span><span class='const'>Socket</span><span class='period'>.</span><span class='id identifier rubyid_source_address'>source_address</span><span class='lparen'>(</span><span class='id identifier rubyid_addr'>addr</span><span class='rparen'>)</span><span class='rbracket'>]</span>
<span class='id identifier rubyid_probe_gateway'>probe_gateway</span><span class='lparen'>(</span><span class='id identifier rubyid_addr'>addr</span><span class='rparen'>)</span>
<span class='kw'>end</span>
<span class='id identifier rubyid_src_mac'>src_mac</span> <span class='op'>=</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_arp_cache'>arp_cache</span><span class='lbracket'>[</span><span class='const'><span class='object_link'><a href="../../Rex.html" title="Rex (module)">Rex</a></span></span><span class='op'>::</span><span class='const'>Socket</span><span class='period'>.</span><span class='id identifier rubyid_source_address'>source_address</span><span class='lparen'>(</span><span class='id identifier rubyid_addr'>addr</span><span class='rparen'>)</span><span class='rbracket'>]</span>
<span class='kw'>if</span> <span class='id identifier rubyid_should_arp?'>should_arp?</span><span class='lparen'>(</span><span class='id identifier rubyid_addr'>addr</span><span class='rparen'>)</span>
<span class='id identifier rubyid_dst_mac'>dst_mac</span> <span class='op'>=</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_arp_cache'>arp_cache</span><span class='lbracket'>[</span><span class='id identifier rubyid_addr'>addr</span><span class='rbracket'>]</span> <span class='op'>||</span> <span class='id identifier rubyid_arp'>arp</span><span class='lparen'>(</span><span class='id identifier rubyid_addr'>addr</span><span class='rparen'>)</span>
<span class='kw'>else</span>
<span class='id identifier rubyid_dst_mac'>dst_mac</span> <span class='op'>=</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_arp_cache'>arp_cache</span><span class='lbracket'>[</span><span class='symbol'>:gateway</span><span class='rbracket'>]</span>
<span class='kw'>end</span>
<span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_dst_cache'>dst_cache</span><span class='lbracket'>[</span><span class='id identifier rubyid_addr'>addr</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='lbracket'>[</span><span class='id identifier rubyid_dst_mac'>dst_mac</span><span class='comma'>,</span> <span class='id identifier rubyid_src_mac'>src_mac</span><span class='rbracket'>]</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="lookupnet-instance_method">
#<strong>lookupnet</strong> &#x21d2; <tt>Object</tt>
</h3><table class="source_code">
<tr>
<td>
<pre class="lines">
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/exploit/capture.rb', line 405</span>
<span class='kw'>def</span> <span class='id identifier rubyid_lookupnet'>lookupnet</span>
<span class='id identifier rubyid_check_pcaprub_loaded'>check_pcaprub_loaded</span>
<span class='id identifier rubyid_dev'>dev</span> <span class='op'>=</span> <span class='id identifier rubyid_datastore'>datastore</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>INTERFACE</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span> <span class='op'>||</span> <span class='op'>::</span><span class='const'>Pcap</span><span class='period'>.</span><span class='id identifier rubyid_lookupdev'>lookupdev</span>
<span class='kw'>begin</span>
<span class='id identifier rubyid_my_ip'>my_ip</span><span class='comma'>,</span> <span class='id identifier rubyid_my_mask'>my_mask</span> <span class='op'>=</span> <span class='const'>Pcap</span><span class='period'>.</span><span class='id identifier rubyid_lookupnet'>lookupnet</span><span class='lparen'>(</span><span class='id identifier rubyid_dev'>dev</span><span class='rparen'>)</span>
<span class='comment'># convert the netmask obtained from the relevant interface to CIDR
</span> <span class='id identifier rubyid_cidr_mask'>cidr_mask</span> <span class='op'>=</span> <span class='id identifier rubyid_my_mask'>my_mask</span><span class='period'>.</span><span class='id identifier rubyid_to_s'>to_s</span><span class='lparen'>(</span><span class='int'>2</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_count'>count</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>1</span><span class='tstring_end'>&#39;</span></span><span class='rparen'>)</span>
<span class='id identifier rubyid_my_net'>my_net</span> <span class='op'>=</span> <span class='const'>IPAddr</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_my_ip'>my_ip</span><span class='embexpr_end'>}</span><span class='tstring_content'>/</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_cidr_mask'>cidr_mask</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span><span class='rparen'>)</span>
<span class='kw'>rescue</span> <span class='const'>RuntimeError</span> <span class='op'>=&gt;</span> <span class='id identifier rubyid_e'>e</span>
<span class='ivar'>@pcaprub_error</span> <span class='op'>=</span> <span class='id identifier rubyid_e'>e</span>
<span class='id identifier rubyid_print_status'>print_status</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Cannot stat device: </span><span class='embexpr_beg'>#{</span><span class='ivar'>@pcaprub_error</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span><span class='rparen'>)</span>
<span class='id identifier rubyid_raise'>raise</span> <span class='const'>RuntimeError</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Pcaprub error: </span><span class='embexpr_beg'>#{</span><span class='ivar'>@pcaprub_error</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span>
<span class='kw'>end</span>
<span class='kw'>return</span> <span class='id identifier rubyid_my_net'>my_net</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="netifaces_implemented?-instance_method">
#<strong>netifaces_implemented?</strong> &#x21d2; <tt>Boolean</tt>
</h3><div class="docstring">
<div class="discussion">
<p>Netifaces code</p>
</div>
</div>
<div class="tags">
<p class="tag_title">Returns:</p>
<ul class="return">
<li>
<span class='type'>(<tt>Boolean</tt>)</span>
</li>
</ul>
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
429
430
431
432
433</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/exploit/capture.rb', line 429</span>
<span class='kw'>def</span> <span class='id identifier rubyid_netifaces_implemented?'>netifaces_implemented?</span>
<span class='ivar'>@network_interface_loaded</span> <span class='kw'>and</span>
<span class='const'>NetworkInterface</span><span class='period'>.</span><span class='id identifier rubyid_respond_to?'>respond_to?</span><span class='lparen'>(</span><span class='symbol'>:interfaces</span><span class='rparen'>)</span> <span class='kw'>and</span>
<span class='const'>NetworkInterface</span><span class='period'>.</span><span class='id identifier rubyid_respond_to?'>respond_to?</span><span class='lparen'>(</span><span class='symbol'>:addresses</span><span class='rparen'>)</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="open_pcap-instance_method">
#<strong>open_pcap</strong>(opts = {}) &#x21d2; <tt>Object</tt>
</h3><div class="docstring">
<div class="discussion">
<p>Opens a handle to the specified device</p>
</div>
</div>
<div class="tags">
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/exploit/capture.rb', line 90</span>
<span class='kw'>def</span> <span class='id identifier rubyid_open_pcap'>open_pcap</span><span class='lparen'>(</span><span class='id identifier rubyid_opts'>opts</span><span class='op'>=</span><span class='lbrace'>{</span><span class='rbrace'>}</span><span class='rparen'>)</span>
<span class='id identifier rubyid_check_pcaprub_loaded'>check_pcaprub_loaded</span>
<span class='kw'>if</span> <span class='const'>RUBY_PLATFORM</span> <span class='op'>==</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>i386-mingw32</span><span class='tstring_end'>&quot;</span></span>
<span class='kw'>if</span> <span class='id identifier rubyid_opts'>opts</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>INTERFACE</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span> <span class='kw'>or</span> <span class='id identifier rubyid_datastore'>datastore</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>INTERFACE</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span>
<span class='id identifier rubyid_dev'>dev</span> <span class='op'>=</span> <span class='id identifier rubyid_opts'>opts</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>INTERFACE</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span> <span class='op'>||</span> <span class='id identifier rubyid_datastore'>datastore</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>INTERFACE</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span>
<span class='kw'>if</span> <span class='id identifier rubyid_is_interface?'>is_interface?</span><span class='lparen'>(</span><span class='id identifier rubyid_dev'>dev</span><span class='rparen'>)</span>
<span class='id identifier rubyid_dev'>dev</span> <span class='op'>=</span> <span class='id identifier rubyid_get_interface_guid'>get_interface_guid</span><span class='lparen'>(</span><span class='id identifier rubyid_dev'>dev</span><span class='rparen'>)</span>
<span class='kw'>end</span>
<span class='kw'>end</span>
<span class='kw'>else</span>
<span class='id identifier rubyid_dev'>dev</span> <span class='op'>=</span> <span class='id identifier rubyid_opts'>opts</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>INTERFACE</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span> <span class='op'>||</span> <span class='id identifier rubyid_datastore'>datastore</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>INTERFACE</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span> <span class='op'>||</span> <span class='kw'>nil</span>
<span class='kw'>end</span>
<span class='id identifier rubyid_len'>len</span> <span class='op'>=</span> <span class='lparen'>(</span><span class='id identifier rubyid_opts'>opts</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>SNAPLEN</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span> <span class='op'>||</span> <span class='id identifier rubyid_datastore'>datastore</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>SNAPLEN</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span> <span class='op'>||</span> <span class='int'>65535</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_to_i'>to_i</span>
<span class='id identifier rubyid_tim'>tim</span> <span class='op'>=</span> <span class='lparen'>(</span><span class='id identifier rubyid_opts'>opts</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>TIMEOUT</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span> <span class='op'>||</span> <span class='id identifier rubyid_datastore'>datastore</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>TIMEOUT</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span> <span class='op'>||</span> <span class='int'>0</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_to_i'>to_i</span>
<span class='id identifier rubyid_fil'>fil</span> <span class='op'>=</span> <span class='id identifier rubyid_opts'>opts</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>FILTER</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span> <span class='op'>||</span> <span class='id identifier rubyid_datastore'>datastore</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>FILTER</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span>
<span class='id identifier rubyid_do_arp'>do_arp</span> <span class='op'>=</span> <span class='lparen'>(</span><span class='id identifier rubyid_opts'>opts</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>ARPCAP</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span> <span class='op'>==</span> <span class='kw'>false</span><span class='rparen'>)</span> <span class='op'>?</span> <span class='kw'>false</span> <span class='op'>:</span> <span class='kw'>true</span>
<span class='comment'># Look for a PCAP file
</span> <span class='id identifier rubyid_cap'>cap</span> <span class='op'>=</span> <span class='id identifier rubyid_datastore'>datastore</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>PCAPFILE</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_end'>&#39;</span></span>
<span class='kw'>if</span> <span class='lparen'>(</span><span class='kw'>not</span> <span class='id identifier rubyid_cap'>cap</span><span class='period'>.</span><span class='id identifier rubyid_empty?'>empty?</span><span class='rparen'>)</span>
<span class='kw'>if</span> <span class='lparen'>(</span><span class='kw'>not</span> <span class='const'>File</span><span class='period'>.</span><span class='id identifier rubyid_exist?'>exist?</span><span class='lparen'>(</span><span class='id identifier rubyid_cap'>cap</span><span class='rparen'>)</span><span class='rparen'>)</span>
<span class='id identifier rubyid_raise'>raise</span> <span class='const'>RuntimeError</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>The PCAP file </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_cap'>cap</span><span class='embexpr_end'>}</span><span class='tstring_content'> could not be found</span><span class='tstring_end'>&quot;</span></span>
<span class='kw'>end</span>
<span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_capture'>capture</span> <span class='op'>=</span> <span class='op'>::</span><span class='const'>Pcap</span><span class='period'>.</span><span class='id identifier rubyid_open_offline'>open_offline</span><span class='lparen'>(</span><span class='id identifier rubyid_cap'>cap</span><span class='rparen'>)</span>
<span class='kw'>else</span>
<span class='id identifier rubyid_dev'>dev</span> <span class='op'>||=</span> <span class='op'>::</span><span class='const'>Pcap</span><span class='period'>.</span><span class='id identifier rubyid_lookupdev'>lookupdev</span>
<span class='kw'>unless</span> <span class='const'>RUBY_PLATFORM</span> <span class='op'>==</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>i386-mingw32</span><span class='tstring_end'>&quot;</span></span>
<span class='id identifier rubyid_system'>system</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>ifconfig</span><span class='tstring_end'>&quot;</span></span><span class='comma'>,</span> <span class='id identifier rubyid_dev'>dev</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>up</span><span class='tstring_end'>&quot;</span></span><span class='rparen'>)</span>
<span class='kw'>end</span>
<span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_capture'>capture</span> <span class='op'>=</span> <span class='op'>::</span><span class='const'>Pcap</span><span class='period'>.</span><span class='id identifier rubyid_open_live'>open_live</span><span class='lparen'>(</span><span class='id identifier rubyid_dev'>dev</span><span class='comma'>,</span> <span class='id identifier rubyid_len'>len</span><span class='comma'>,</span> <span class='kw'>true</span><span class='comma'>,</span> <span class='id identifier rubyid_tim'>tim</span><span class='rparen'>)</span>
<span class='kw'>if</span> <span class='id identifier rubyid_do_arp'>do_arp</span>
<span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_arp_capture'>arp_capture</span> <span class='op'>=</span> <span class='op'>::</span><span class='const'>Pcap</span><span class='period'>.</span><span class='id identifier rubyid_open_live'>open_live</span><span class='lparen'>(</span><span class='id identifier rubyid_dev'>dev</span><span class='comma'>,</span> <span class='int'>512</span><span class='comma'>,</span> <span class='kw'>true</span><span class='comma'>,</span> <span class='id identifier rubyid_tim'>tim</span><span class='rparen'>)</span>
<span class='id identifier rubyid_preamble'>preamble</span> <span class='op'>=</span> <span class='id identifier rubyid_datastore'>datastore</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>SECRET</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_to_i'>to_i</span>
<span class='id identifier rubyid_arp_filter'>arp_filter</span> <span class='op'>=</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>arp[6:2] = 2 or (udp[8:4] = </span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_preamble'>preamble</span><span class='embexpr_end'>}</span><span class='tstring_content'>)</span><span class='tstring_end'>&quot;</span></span>
<span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_arp_capture'>arp_capture</span><span class='period'>.</span><span class='id identifier rubyid_setfilter'>setfilter</span><span class='lparen'>(</span><span class='id identifier rubyid_arp_filter'>arp_filter</span><span class='rparen'>)</span>
<span class='kw'>end</span>
<span class='kw'>end</span>
<span class='kw'>if</span> <span class='lparen'>(</span><span class='kw'>not</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_capture'>capture</span><span class='rparen'>)</span>
<span class='id identifier rubyid_raise'>raise</span> <span class='const'>RuntimeError</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Could not start the capture process</span><span class='tstring_end'>&quot;</span></span>
<span class='kw'>elsif</span> <span class='lparen'>(</span><span class='id identifier rubyid_do_arp'>do_arp</span> <span class='kw'>and</span> <span class='op'>!</span><span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_arp_capture'>arp_capture</span> <span class='kw'>and</span> <span class='id identifier rubyid_cap'>cap</span><span class='period'>.</span><span class='id identifier rubyid_empty?'>empty?</span><span class='rparen'>)</span>
<span class='id identifier rubyid_raise'>raise</span> <span class='const'>RuntimeError</span><span class='comma'>,</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>Could not start the ARP capture process</span><span class='tstring_end'>&quot;</span></span>
<span class='kw'>end</span>
<span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_capture'>capture</span><span class='period'>.</span><span class='id identifier rubyid_setfilter'>setfilter</span><span class='lparen'>(</span><span class='id identifier rubyid_fil'>fil</span><span class='rparen'>)</span> <span class='kw'>if</span> <span class='id identifier rubyid_fil'>fil</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="probe_gateway-instance_method">
#<strong>probe_gateway</strong>(addr) &#x21d2; <tt>Object</tt>
</h3><table class="source_code">
<tr>
<td>
<pre class="lines">
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/exploit/capture.rb', line 302</span>
<span class='kw'>def</span> <span class='id identifier rubyid_probe_gateway'>probe_gateway</span><span class='lparen'>(</span><span class='id identifier rubyid_addr'>addr</span><span class='rparen'>)</span>
<span class='id identifier rubyid_dst_host'>dst_host</span> <span class='op'>=</span> <span class='id identifier rubyid_datastore'>datastore</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>GATEWAY_PROBE_HOST</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span>
<span class='id identifier rubyid_dst_port'>dst_port</span> <span class='op'>=</span> <span class='id identifier rubyid_datastore'>datastore</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>GATEWAY_PROBE_PORT</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_to_i'>to_i</span> <span class='op'>==</span> <span class='int'>0</span> <span class='op'>?</span> <span class='id identifier rubyid_rand'>rand</span><span class='lparen'>(</span><span class='int'>30000</span><span class='rparen'>)</span> <span class='op'>+</span> <span class='int'>1024</span> <span class='op'>:</span> <span class='id identifier rubyid_datastore'>datastore</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>GATEWAY_PROBE_PORT</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span>
<span class='id identifier rubyid_preamble'>preamble</span> <span class='op'>=</span> <span class='lbracket'>[</span><span class='id identifier rubyid_datastore'>datastore</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>SECRET</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span><span class='rbracket'>]</span><span class='period'>.</span><span class='id identifier rubyid_pack'>pack</span><span class='lparen'>(</span><span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>N</span><span class='tstring_end'>&quot;</span></span><span class='rparen'>)</span>
<span class='id identifier rubyid_secret'>secret</span> <span class='op'>=</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='embexpr_beg'>#{</span><span class='id identifier rubyid_preamble'>preamble</span><span class='embexpr_end'>}</span><span class='embexpr_beg'>#{</span><span class='const'><span class='object_link'><a href="../../Rex.html" title="Rex (module)">Rex</a></span></span><span class='op'>::</span><span class='const'>Text</span><span class='period'>.</span><span class='id identifier rubyid_rand_text'>rand_text</span><span class='lparen'>(</span><span class='id identifier rubyid_rand'>rand</span><span class='lparen'>(</span><span class='int'>0xff</span><span class='rparen'>)</span><span class='op'>+</span><span class='int'>1</span><span class='rparen'>)</span><span class='embexpr_end'>}</span><span class='tstring_end'>&quot;</span></span>
<span class='kw'>begin</span>
<span class='const'>UDPSocket</span><span class='period'>.</span><span class='id identifier rubyid_open'>open</span> <span class='kw'>do</span> <span class='op'>|</span><span class='id identifier rubyid_sock'>sock</span><span class='op'>|</span>
<span class='id identifier rubyid_sock'>sock</span><span class='period'>.</span><span class='id identifier rubyid_setsockopt'>setsockopt</span><span class='lparen'>(</span><span class='op'>::</span><span class='const'>Socket</span><span class='op'>::</span><span class='const'>IPPROTO_IP</span><span class='comma'>,</span> <span class='op'>::</span><span class='const'>Socket</span><span class='op'>::</span><span class='const'>IP_TTL</span><span class='comma'>,</span> <span class='int'>1</span><span class='rparen'>)</span>
<span class='id identifier rubyid_sock'>sock</span><span class='period'>.</span><span class='id identifier rubyid_send'>send</span><span class='lparen'>(</span><span class='id identifier rubyid_secret'>secret</span><span class='comma'>,</span> <span class='int'>0</span><span class='comma'>,</span> <span class='id identifier rubyid_dst_host'>dst_host</span><span class='comma'>,</span> <span class='id identifier rubyid_dst_port'>dst_port</span><span class='rparen'>)</span>
<span class='kw'>end</span>
<span class='kw'>rescue</span> <span class='const'>Errno</span><span class='op'>::</span><span class='const'>ENETUNREACH</span>
<span class='comment'># This happens on networks with no gateway. We&#39;ll need to use a
</span> <span class='comment'># fake source hardware address.
</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_arp_cache'>arp_cache</span><span class='lbracket'>[</span><span class='const'><span class='object_link'><a href="../../Rex.html" title="Rex (module)">Rex</a></span></span><span class='op'>::</span><span class='const'>Socket</span><span class='period'>.</span><span class='id identifier rubyid_source_address'>source_address</span><span class='lparen'>(</span><span class='id identifier rubyid_addr'>addr</span><span class='rparen'>)</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>00:00:00:00:00:00</span><span class='tstring_end'>&quot;</span></span>
<span class='kw'>end</span>
<span class='kw'>begin</span>
<span class='id identifier rubyid_to'>to</span> <span class='op'>=</span> <span class='lparen'>(</span><span class='lparen'>(</span><span class='id identifier rubyid_datastore'>datastore</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>TIMEOUT</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span> <span class='op'>||</span> <span class='int'>500</span><span class='rparen'>)</span><span class='period'>.</span><span class='id identifier rubyid_to_f'>to_f</span> <span class='op'>*</span> <span class='int'>8</span><span class='rparen'>)</span> <span class='op'>/</span> <span class='float'>1000.0</span>
<span class='op'>::</span><span class='const'>Timeout</span><span class='period'>.</span><span class='id identifier rubyid_timeout'>timeout</span><span class='lparen'>(</span><span class='id identifier rubyid_to'>to</span><span class='rparen'>)</span> <span class='kw'>do</span>
<span class='id identifier rubyid_loop'>loop</span> <span class='kw'>do</span>
<span class='id identifier rubyid_my_packet'>my_packet</span> <span class='op'>=</span> <span class='id identifier rubyid_inject_reply'>inject_reply</span><span class='lparen'>(</span><span class='symbol'>:udp</span><span class='comma'>,</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_arp_capture'>arp_capture</span><span class='rparen'>)</span>
<span class='kw'>next</span> <span class='kw'>unless</span> <span class='id identifier rubyid_my_packet'>my_packet</span>
<span class='kw'>next</span> <span class='kw'>unless</span> <span class='id identifier rubyid_my_packet'>my_packet</span><span class='period'>.</span><span class='id identifier rubyid_payload'>payload</span> <span class='op'>==</span> <span class='id identifier rubyid_secret'>secret</span>
<span class='id identifier rubyid_dst_mac'>dst_mac</span> <span class='op'>=</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_arp_cache'>arp_cache</span><span class='lbracket'>[</span><span class='symbol'>:gateway</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='id identifier rubyid_my_packet'>my_packet</span><span class='period'>.</span><span class='id identifier rubyid_eth_daddr'>eth_daddr</span>
<span class='id identifier rubyid_src_mac'>src_mac</span> <span class='op'>=</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_arp_cache'>arp_cache</span><span class='lbracket'>[</span><span class='const'><span class='object_link'><a href="../../Rex.html" title="Rex (module)">Rex</a></span></span><span class='op'>::</span><span class='const'>Socket</span><span class='period'>.</span><span class='id identifier rubyid_source_address'>source_address</span><span class='lparen'>(</span><span class='id identifier rubyid_addr'>addr</span><span class='rparen'>)</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='id identifier rubyid_my_packet'>my_packet</span><span class='period'>.</span><span class='id identifier rubyid_eth_saddr'>eth_saddr</span>
<span class='kw'>return</span> <span class='lbracket'>[</span><span class='id identifier rubyid_dst_mac'>dst_mac</span><span class='comma'>,</span> <span class='id identifier rubyid_src_mac'>src_mac</span><span class='rbracket'>]</span>
<span class='kw'>end</span>
<span class='kw'>end</span>
<span class='kw'>rescue</span> <span class='op'>::</span><span class='const'>Timeout</span><span class='op'>::</span><span class='const'>Error</span>
<span class='comment'># Well, that didn&#39;t work (this is common on networks where there&#39;s no gateway, like
</span> <span class='comment'># VMWare network interfaces. We&#39;ll need to use a fake source hardware address.
</span> <span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_arp_cache'>arp_cache</span><span class='lbracket'>[</span><span class='const'><span class='object_link'><a href="../../Rex.html" title="Rex (module)">Rex</a></span></span><span class='op'>::</span><span class='const'>Socket</span><span class='period'>.</span><span class='id identifier rubyid_source_address'>source_address</span><span class='lparen'>(</span><span class='id identifier rubyid_addr'>addr</span><span class='rparen'>)</span><span class='rbracket'>]</span> <span class='op'>=</span> <span class='tstring'><span class='tstring_beg'>&quot;</span><span class='tstring_content'>00:00:00:00:00:00</span><span class='tstring_end'>&quot;</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="rhost-instance_method">
#<strong>rhost</strong> &#x21d2; <tt>Object</tt>
</h3><div class="docstring">
<div class="discussion">
<p>For compatibility with Msf::Exploit::Remote::Ip</p>
</div>
</div>
<div class="tags">
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
389
390
391</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/exploit/capture.rb', line 389</span>
<span class='kw'>def</span> <span class='id identifier rubyid_rhost'>rhost</span>
<span class='id identifier rubyid_datastore'>datastore</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>RHOST</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="should_arp?-instance_method">
#<strong>should_arp?</strong>(ip) &#x21d2; <tt>Boolean</tt>
</h3><div class="docstring">
<div class="discussion">
</div>
</div>
<div class="tags">
<p class="tag_title">Returns:</p>
<ul class="return">
<li>
<span class='type'>(<tt>Boolean</tt>)</span>
</li>
</ul>
</div><table class="source_code">
<tr>
<td>
<pre class="lines">
421
422
423</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/exploit/capture.rb', line 421</span>
<span class='kw'>def</span> <span class='id identifier rubyid_should_arp?'>should_arp?</span><span class='lparen'>(</span><span class='id identifier rubyid_ip'>ip</span><span class='rparen'>)</span>
<span class='id identifier rubyid_lookupnet'>lookupnet</span><span class='period'>.</span><span class='id identifier rubyid_include?'>include?</span><span class='lparen'>(</span><span class='const'>IPAddr</span><span class='period'>.</span><span class='id identifier rubyid_new'>new</span><span class='lparen'>(</span><span class='id identifier rubyid_ip'>ip</span><span class='rparen'>)</span><span class='rparen'>)</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="stats_drop-instance_method">
#<strong>stats_drop</strong>(pcap = self.capture) &#x21d2; <tt>Object</tt>
</h3><table class="source_code">
<tr>
<td>
<pre class="lines">
77
78
79
80</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/exploit/capture.rb', line 77</span>
<span class='kw'>def</span> <span class='id identifier rubyid_stats_drop'>stats_drop</span><span class='lparen'>(</span><span class='id identifier rubyid_pcap'>pcap</span><span class='op'>=</span><span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_capture'>capture</span><span class='rparen'>)</span>
<span class='kw'>return</span><span class='lparen'>(</span><span class='int'>0</span><span class='rparen'>)</span> <span class='kw'>unless</span> <span class='id identifier rubyid_pcap'>pcap</span>
<span class='id identifier rubyid_pcap'>pcap</span><span class='period'>.</span><span class='id identifier rubyid_stats'>stats</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>drop</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="stats_ifdrop-instance_method">
#<strong>stats_ifdrop</strong>(pcap = self.capture) &#x21d2; <tt>Object</tt>
</h3><table class="source_code">
<tr>
<td>
<pre class="lines">
82
83
84
85</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/exploit/capture.rb', line 82</span>
<span class='kw'>def</span> <span class='id identifier rubyid_stats_ifdrop'>stats_ifdrop</span><span class='lparen'>(</span><span class='id identifier rubyid_pcap'>pcap</span><span class='op'>=</span><span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_capture'>capture</span><span class='rparen'>)</span>
<span class='kw'>return</span><span class='lparen'>(</span><span class='int'>0</span><span class='rparen'>)</span> <span class='kw'>unless</span> <span class='id identifier rubyid_pcap'>pcap</span>
<span class='id identifier rubyid_pcap'>pcap</span><span class='period'>.</span><span class='id identifier rubyid_stats'>stats</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>ifdrop</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
<div class="method_details ">
<h3 class="signature " id="stats_recv-instance_method">
#<strong>stats_recv</strong>(pcap = self.capture) &#x21d2; <tt>Object</tt>
</h3><table class="source_code">
<tr>
<td>
<pre class="lines">
72
73
74
75</pre>
</td>
<td>
<pre class="code"><span class="info file"># File 'lib/msf/core/exploit/capture.rb', line 72</span>
<span class='kw'>def</span> <span class='id identifier rubyid_stats_recv'>stats_recv</span><span class='lparen'>(</span><span class='id identifier rubyid_pcap'>pcap</span><span class='op'>=</span><span class='kw'>self</span><span class='period'>.</span><span class='id identifier rubyid_capture'>capture</span><span class='rparen'>)</span>
<span class='kw'>return</span><span class='lparen'>(</span><span class='int'>0</span><span class='rparen'>)</span> <span class='kw'>unless</span> <span class='id identifier rubyid_pcap'>pcap</span>
<span class='id identifier rubyid_pcap'>pcap</span><span class='period'>.</span><span class='id identifier rubyid_stats'>stats</span><span class='lbracket'>[</span><span class='tstring'><span class='tstring_beg'>&#39;</span><span class='tstring_content'>recv</span><span class='tstring_end'>&#39;</span></span><span class='rbracket'>]</span>
<span class='kw'>end</span></pre>
</td>
</tr>
</table>
</div>
</div>
</div>
<div id="footer">
Generated on Fri May 8 17:01:11 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>