@@ -26,7 +26,7 @@ def commands
26
26
'mic_start' => 'start capturing an audio stream from the target mic' ,
27
27
'mic_stop' => 'stop capturing audio' ,
28
28
'mic_list' => 'list all microphone interfaces' ,
29
- 'listen' => 'listen to streaming audio via audio player'
29
+ 'listen' => 'listen to a saved audio recording via audio player'
30
30
}
31
31
reqs = {
32
32
'mic_start' => [ 'audio_mic_start' ] ,
@@ -91,17 +91,14 @@ def audio_file_wave_header(sample_rate_hz, num_channels, bits_per_sample, data_s
91
91
end
92
92
93
93
def cmd_mic_start ( *args )
94
- start_delay = 8
95
94
device_id = 1
96
95
duration = 1800
97
- play_stream = true
98
96
saved_audio_path = Rex ::Text . rand_text_alpha ( 8 ) + ".wav"
99
97
100
98
mic_start_opts = Rex ::Parser ::Arguments . new (
101
99
"-h" => [ false , "Help Banner" ] ,
102
100
"-d" => [ true , "The stream duration in seconds (Default: 1800)" ] , # 30 min
103
101
"-m" => [ true , "Microphone device index to record from (1: system default)" ] ,
104
- "-p" => [ true , "Automatically start a player for the stream (Default: '#{ play_stream } ')" ] ,
105
102
"-s" => [ true , "The saved audio file path (Default: '#{ saved_audio_path } ')" ]
106
103
)
107
104
@@ -116,8 +113,6 @@ def cmd_mic_start(*args)
116
113
duration = val . to_i
117
114
when "-m"
118
115
device_id = val . to_i
119
- when "-p"
120
- play = false if val =~ /^(f|n|0)/i
121
116
when "-s"
122
117
saved_audio_path = val
123
118
end
@@ -142,7 +137,6 @@ def cmd_mic_start(*args)
142
137
::File . open ( saved_audio_path , 'wb' ) do |outfd |
143
138
audio_file_wave_header ( 11025 , 1 , 16 , 2000000000 ) . each { |e | e . write ( outfd ) }
144
139
end
145
- stream_index = 0
146
140
while client do
147
141
Rex ::sleep ( 0.5 )
148
142
data = channel . read ( 65536 )
@@ -151,10 +145,6 @@ def cmd_mic_start(*args)
151
145
f . write ( data )
152
146
end
153
147
data = nil
154
- stream_index += 1
155
- if stream_index == start_delay
156
- cmd_listen ( saved_audio_path )
157
- end
158
148
end
159
149
end
160
150
end
@@ -167,9 +157,32 @@ def cmd_mic_start(*args)
167
157
end
168
158
end
169
159
170
- def cmd_listen ( saved_audio_path )
171
- #Rex::Compat.open_webrtc_browser("file://#{::File.absolute_path(saved_audio_path)}")
172
- Rex ::Compat . play_sound ( ::File . expand_path ( saved_audio_path ) )
160
+ def cmd_listen ( *args )
161
+ filename = nil
162
+
163
+ listen_opts = Rex ::Parser ::Arguments . new (
164
+ "-h" => [ false , "Help Banner" ] ,
165
+ "-f" => [ true , "audio filename" ]
166
+ )
167
+
168
+ listen_opts . parse ( args ) do |opt , _idx , val |
169
+ case opt
170
+ when "-h"
171
+ print_line ( "Usage: listen -f <filename>\n " )
172
+ print_line ( "Plays saved audio from a file." )
173
+ print_line ( listen_opts . usage )
174
+ return
175
+ when "-f"
176
+ filename = val
177
+ end
178
+ end
179
+
180
+ if filename . nil?
181
+ print_error ( "use '-f' option to provide a filename for playback" )
182
+ return
183
+ end
184
+
185
+ Rex ::Compat . play_sound ( ::File . expand_path ( filename ) )
173
186
end
174
187
175
188
def cmd_mic_stop
0 commit comments