Module: PWN::Plugins::Serial
- Defined in:
- lib/pwn/plugins/serial.rb
Overview
This plugin is used for interacting with serial devices including, but not limited to, modems (including cellphone radios), legacy equipment, arduinos, & other misc ftdi devices
Class Method Summary collapse
-
.authors ⇒ Object
- Author(s)
-
0day Inc.
-
.connect(opts = {}) ⇒ Object
- Supported Method Parameters
-
serial_obj = PWN::Plugins::Serial.connect( block_dev: ‘optional - serial block device path (defaults to /dev/ttyUSB0)’, baud: ‘optional - (defaults to 9600)’, data_bits: ‘optional - (defaults to 8)’, stop_bits: ‘optional - (defaults to 1)’, parity: ‘optional - (defaults to SerialPort::NONE)’, flow_control: ‘optional - (defaults to SerialPort::HARD) SerialPort::NONE|SerialPort::SOFT|SerialPort::HARD’ ).
-
.disconnect(opts = {}) ⇒ Object
- Supported Method Parameters
-
PWN::Plugins::Serial.disconnect( serial_obj: ‘required - serial_obj returned from #connect method’ ).
-
.dump_session_data(opts = {}) ⇒ Object
- Supported Method Parameters
-
session_data = PWN::Plugins::Serial.dump_session_data( serial_obj: ‘required - serial_obj returned from #connect method’ ).
-
.flush_session_data(opts = {}) ⇒ Object
- Supported Method Parameters
-
session_data = PWN::Plugins::Serial.flush_session_data( serial_obj: ‘required - serial_obj returned from #connect method’ ).
-
.get_line_state(opts = {}) ⇒ Object
- Supported Method Parameters
-
line_state = PWN::Plugins::Serial.get_line_state( serial_obj: ‘required serial_obj returned from #connect method’ ).
-
.get_modem_params(opts = {}) ⇒ Object
- Supported Method Parameters
-
modem_params = PWN::Plugins::Serial.get_modem_params( serial_obj: ‘required - serial_obj returned from #connect method’ ).
-
.help ⇒ Object
Display Usage for this Module.
-
.request(opts = {}) ⇒ Object
- Supported Method Parameters
-
PWN::Plugins::Serial.request( serial_obj: ‘required serial_obj returned from #connect method’, request: ‘required - string to write to serial device’ ).
-
.response(opts = {}) ⇒ Object
- Supported Method Parameters
-
PWN::Plugins::Serial.response( serial_obj: ‘required - serial_obj returned from #connect method’ ).
Class Method Details
.authors ⇒ Object
- Author(s)
-
0day Inc. <[email protected]>
216 217 218 219 220 |
# File 'lib/pwn/plugins/serial.rb', line 216 public_class_method def self. "AUTHOR(S): 0day Inc. <[email protected]> " end |
.connect(opts = {}) ⇒ Object
- Supported Method Parameters
-
serial_obj = PWN::Plugins::Serial.connect(
block_dev: 'optional - serial block device path (defaults to /dev/ttyUSB0)', baud: 'optional - (defaults to 9600)', data_bits: 'optional - (defaults to 8)', stop_bits: 'optional - (defaults to 1)', parity: 'optional - (defaults to SerialPort::NONE)', flow_control: 'optional - (defaults to SerialPort::HARD) SerialPort::NONE|SerialPort::SOFT|SerialPort::HARD'
)
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 71 72 73 74 75 76 77 78 79 |
# File 'lib/pwn/plugins/serial.rb', line 24 public_class_method def self.connect(opts = {}) block_dev = opts[:block_dev].to_s if File.exist?( opts[:block_dev].to_s ) block_dev = '/dev/ttyUSB0' if opts[:block_dev].nil? baud = if opts[:baud].nil? 9_600 else opts[:baud].to_i end data_bits = if opts[:data_bits].nil? 8 else opts[:data_bits].to_i end stop_bits = if opts[:stop_bits].nil? 1 else opts[:stop_bits].to_i end parity = if opts[:parity].nil? SerialPort::NONE else opts[:parity] end flow_control = if opts[:flow_control].nil? SerialPort::HARD else opts[:flow_control] end serial_conn = SerialPort.new( block_dev, baud, data_bits, stop_bits, parity, flow_control ) serial_obj = {} serial_obj[:serial_conn] = serial_conn serial_obj[:session_thread] = init_session_thread( serial_conn: serial_conn ) serial_obj rescue StandardError => e disconnect(serial_obj: serial_obj) unless serial_obj.nil? raise e end |
.disconnect(opts = {}) ⇒ Object
- Supported Method Parameters
-
PWN::Plugins::Serial.disconnect(
serial_obj: 'required - serial_obj returned from #connect method'
)
202 203 204 205 206 207 208 209 210 211 212 |
# File 'lib/pwn/plugins/serial.rb', line 202 public_class_method def self.disconnect(opts = {}) serial_obj = opts[:serial_obj] serial_conn = serial_obj[:serial_conn] session_thread = serial_obj[:session_thread] flush_session_data(serial_obj: serial_obj) session_thread.terminate serial_conn.close serial_conn = nil rescue StandardError => e raise e end |
.dump_session_data(opts = {}) ⇒ Object
- Supported Method Parameters
-
session_data = PWN::Plugins::Serial.dump_session_data(
serial_obj: 'required - serial_obj returned from #connect method'
)
174 175 176 177 178 179 180 181 |
# File 'lib/pwn/plugins/serial.rb', line 174 public_class_method def self.dump_session_data(opts = {}) serial_obj = opts[:serial_obj] @session_data rescue StandardError => e disconnect(serial_obj: serial_obj) unless serial_obj.nil? raise e end |
.flush_session_data(opts = {}) ⇒ Object
- Supported Method Parameters
-
session_data = PWN::Plugins::Serial.flush_session_data(
serial_obj: 'required - serial_obj returned from #connect method'
)
188 189 190 191 192 193 194 195 |
# File 'lib/pwn/plugins/serial.rb', line 188 public_class_method def self.flush_session_data(opts = {}) serial_obj = opts[:serial_obj] @session_data.clear rescue StandardError => e disconnect(serial_obj: serial_obj) unless serial_obj.nil? raise e end |
.get_line_state(opts = {}) ⇒ Object
- Supported Method Parameters
-
line_state = PWN::Plugins::Serial.get_line_state(
serial_obj: 'required serial_obj returned from #connect method'
)
115 116 117 118 119 120 121 122 |
# File 'lib/pwn/plugins/serial.rb', line 115 public_class_method def self.get_line_state(opts = {}) serial_obj = opts[:serial_obj] serial_conn = serial_obj[:serial_conn] serial_conn.get_signals rescue StandardError => e disconnect(serial_obj: serial_obj) unless serial_obj.nil? raise e end |
.get_modem_params(opts = {}) ⇒ Object
- Supported Method Parameters
-
modem_params = PWN::Plugins::Serial.get_modem_params(
serial_obj: 'required - serial_obj returned from #connect method'
)
129 130 131 132 133 134 135 136 |
# File 'lib/pwn/plugins/serial.rb', line 129 public_class_method def self.get_modem_params(opts = {}) serial_obj = opts[:serial_obj] serial_conn = serial_obj[:serial_conn] serial_conn.get_modem_params rescue StandardError => e disconnect(serial_obj: serial_obj) unless serial_obj.nil? raise e end |
.help ⇒ Object
Display Usage for this Module
224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 |
# File 'lib/pwn/plugins/serial.rb', line 224 public_class_method def self.help puts "USAGE: serial_obj = #{self}.connect( block_dev: 'optional serial block device path (defaults to /dev/ttyUSB0)', baud: 'optional (defaults to 9600)', data_bits: 'optional (defaults to 8)', stop_bits: 'optional (defaults to 1)', parity: 'optional (defaults to SerialPort::NONE)', flow_control: 'optional (defaults to SerialPort::NONE)' ) line_state = #{self}.get_line_state( serial_obj: 'required serial_obj returned from #connect method' ) modem_params = #{self}.get_modem_params( serial_obj: 'required serial_obj returned from #connect method' ) #{self}.request( serial_obj: 'required serial_obj returned from #connect method', request: 'required string to write to serial device' ) #{self}.response( serial_obj: 'required serial_obj returned from #connect method' ) session_data_arr = #{self}.dump_session_data( serial_obj: 'required serial_obj returned from #connect method' ) #{self}.flush_session_data serial_obj: 'required serial_obj returned from #connect method' ) #{self}.disconnect( serial_obj: 'required serial_obj returned from #connect method' ) #{self}.authors " end |
.request(opts = {}) ⇒ Object
- Supported Method Parameters
-
PWN::Plugins::Serial.request(
serial_obj: 'required serial_obj returned from #connect method', request: 'required - string to write to serial device'
)
144 145 146 147 148 149 150 151 152 153 154 |
# File 'lib/pwn/plugins/serial.rb', line 144 public_class_method def self.request(opts = {}) serial_obj = opts[:serial_obj] request = opts[:request].to_s.scrub serial_conn = serial_obj[:serial_conn] chars_written = serial_conn.write(request) serial_conn.flush chars_written rescue StandardError => e disconnect(serial_obj: serial_obj) unless serial_obj.nil? raise e end |
.response(opts = {}) ⇒ Object
- Supported Method Parameters
-
PWN::Plugins::Serial.response(
serial_obj: 'required - serial_obj returned from #connect method'
)
161 162 163 164 165 166 167 |
# File 'lib/pwn/plugins/serial.rb', line 161 public_class_method def self.response(opts = {}) serial_obj = opts[:serial_obj] @session_data.last rescue StandardError => e disconnect(serial_obj: serial_obj) unless serial_obj.nil? raise e end |