librex 0.0.13 → 0.0.15

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (435) hide show
  1. data/README.markdown +1 -1
  2. data/Rakefile +1 -0
  3. metadata +3 -435
  4. data/lib/rex/LICENSE +0 -29
  5. data/lib/rex/arch.rb +0 -103
  6. data/lib/rex/arch/sparc.rb +0 -75
  7. data/lib/rex/arch/sparc.rb.ut.rb +0 -18
  8. data/lib/rex/arch/x86.rb +0 -513
  9. data/lib/rex/arch/x86.rb.ut.rb +0 -93
  10. data/lib/rex/assembly/nasm.rb +0 -104
  11. data/lib/rex/assembly/nasm.rb.ut.rb +0 -22
  12. data/lib/rex/codepage.map +0 -104
  13. data/lib/rex/compat.rb +0 -311
  14. data/lib/rex/constants.rb +0 -113
  15. data/lib/rex/elfparsey.rb +0 -11
  16. data/lib/rex/elfparsey/elf.rb +0 -123
  17. data/lib/rex/elfparsey/elfbase.rb +0 -258
  18. data/lib/rex/elfparsey/exceptions.rb +0 -27
  19. data/lib/rex/elfscan.rb +0 -12
  20. data/lib/rex/elfscan/scanner.rb +0 -207
  21. data/lib/rex/elfscan/search.rb +0 -46
  22. data/lib/rex/encoder/alpha2.rb +0 -31
  23. data/lib/rex/encoder/alpha2/alpha_mixed.rb +0 -68
  24. data/lib/rex/encoder/alpha2/alpha_upper.rb +0 -79
  25. data/lib/rex/encoder/alpha2/generic.rb +0 -114
  26. data/lib/rex/encoder/alpha2/unicode_mixed.rb +0 -117
  27. data/lib/rex/encoder/alpha2/unicode_upper.rb +0 -129
  28. data/lib/rex/encoder/ndr.rb +0 -89
  29. data/lib/rex/encoder/ndr.rb.ut.rb +0 -44
  30. data/lib/rex/encoder/nonalpha.rb +0 -61
  31. data/lib/rex/encoder/nonupper.rb +0 -64
  32. data/lib/rex/encoder/xdr.rb +0 -106
  33. data/lib/rex/encoder/xdr.rb.ut.rb +0 -29
  34. data/lib/rex/encoder/xor.rb +0 -69
  35. data/lib/rex/encoder/xor/dword.rb +0 -13
  36. data/lib/rex/encoder/xor/dword_additive.rb +0 -13
  37. data/lib/rex/encoders/xor_dword.rb +0 -35
  38. data/lib/rex/encoders/xor_dword_additive.rb +0 -53
  39. data/lib/rex/encoders/xor_dword_additive.rb.ut.rb +0 -12
  40. data/lib/rex/encoding/xor.rb +0 -20
  41. data/lib/rex/encoding/xor.rb.ts.rb +0 -14
  42. data/lib/rex/encoding/xor/byte.rb +0 -15
  43. data/lib/rex/encoding/xor/byte.rb.ut.rb +0 -21
  44. data/lib/rex/encoding/xor/dword.rb +0 -21
  45. data/lib/rex/encoding/xor/dword.rb.ut.rb +0 -15
  46. data/lib/rex/encoding/xor/dword_additive.rb +0 -92
  47. data/lib/rex/encoding/xor/dword_additive.rb.ut.rb +0 -15
  48. data/lib/rex/encoding/xor/exceptions.rb +0 -17
  49. data/lib/rex/encoding/xor/generic.rb +0 -146
  50. data/lib/rex/encoding/xor/generic.rb.ut.rb +0 -120
  51. data/lib/rex/encoding/xor/qword.rb +0 -15
  52. data/lib/rex/encoding/xor/word.rb +0 -21
  53. data/lib/rex/encoding/xor/word.rb.ut.rb +0 -13
  54. data/lib/rex/exceptions.rb +0 -275
  55. data/lib/rex/exceptions.rb.ut.rb +0 -44
  56. data/lib/rex/exploitation/cmdstager.rb +0 -9
  57. data/lib/rex/exploitation/cmdstager/base.rb +0 -175
  58. data/lib/rex/exploitation/cmdstager/debug_asm.rb +0 -142
  59. data/lib/rex/exploitation/cmdstager/debug_write.rb +0 -136
  60. data/lib/rex/exploitation/cmdstager/tftp.rb +0 -63
  61. data/lib/rex/exploitation/cmdstager/vbs.rb +0 -128
  62. data/lib/rex/exploitation/egghunter.rb +0 -277
  63. data/lib/rex/exploitation/egghunter.rb.ut.rb +0 -25
  64. data/lib/rex/exploitation/encryptjs.rb +0 -77
  65. data/lib/rex/exploitation/heaplib.js.b64 +0 -331
  66. data/lib/rex/exploitation/heaplib.rb +0 -94
  67. data/lib/rex/exploitation/javascriptosdetect.rb +0 -897
  68. data/lib/rex/exploitation/obfuscatejs.rb +0 -335
  69. data/lib/rex/exploitation/omelet.rb +0 -320
  70. data/lib/rex/exploitation/omelet.rb.ut.rb +0 -13
  71. data/lib/rex/exploitation/opcodedb.rb +0 -818
  72. data/lib/rex/exploitation/opcodedb.rb.ut.rb +0 -279
  73. data/lib/rex/exploitation/seh.rb +0 -92
  74. data/lib/rex/exploitation/seh.rb.ut.rb +0 -19
  75. data/lib/rex/file.rb +0 -112
  76. data/lib/rex/file.rb.ut.rb +0 -16
  77. data/lib/rex/image_source.rb +0 -12
  78. data/lib/rex/image_source/disk.rb +0 -60
  79. data/lib/rex/image_source/image_source.rb +0 -46
  80. data/lib/rex/image_source/memory.rb +0 -37
  81. data/lib/rex/io/bidirectional_pipe.rb +0 -157
  82. data/lib/rex/io/datagram_abstraction.rb +0 -35
  83. data/lib/rex/io/stream.rb +0 -319
  84. data/lib/rex/io/stream_abstraction.rb +0 -197
  85. data/lib/rex/io/stream_server.rb +0 -211
  86. data/lib/rex/job_container.rb +0 -187
  87. data/lib/rex/logging.rb +0 -4
  88. data/lib/rex/logging/log_dispatcher.rb +0 -179
  89. data/lib/rex/logging/log_sink.rb +0 -42
  90. data/lib/rex/logging/sinks/flatfile.rb +0 -55
  91. data/lib/rex/logging/sinks/stderr.rb +0 -43
  92. data/lib/rex/machparsey.rb +0 -9
  93. data/lib/rex/machparsey/exceptions.rb +0 -34
  94. data/lib/rex/machparsey/mach.rb +0 -209
  95. data/lib/rex/machparsey/machbase.rb +0 -408
  96. data/lib/rex/machscan.rb +0 -9
  97. data/lib/rex/machscan/scanner.rb +0 -217
  98. data/lib/rex/mime.rb +0 -9
  99. data/lib/rex/mime/header.rb +0 -77
  100. data/lib/rex/mime/message.rb +0 -144
  101. data/lib/rex/mime/part.rb +0 -20
  102. data/lib/rex/nop/opty2.rb +0 -108
  103. data/lib/rex/nop/opty2.rb.ut.rb +0 -23
  104. data/lib/rex/nop/opty2_tables.rb +0 -300
  105. data/lib/rex/ole.rb +0 -205
  106. data/lib/rex/ole/clsid.rb +0 -47
  107. data/lib/rex/ole/difat.rb +0 -141
  108. data/lib/rex/ole/directory.rb +0 -231
  109. data/lib/rex/ole/direntry.rb +0 -240
  110. data/lib/rex/ole/docs/dependencies.txt +0 -8
  111. data/lib/rex/ole/docs/references.txt +0 -1
  112. data/lib/rex/ole/fat.rb +0 -99
  113. data/lib/rex/ole/header.rb +0 -204
  114. data/lib/rex/ole/minifat.rb +0 -77
  115. data/lib/rex/ole/propset.rb +0 -144
  116. data/lib/rex/ole/samples/create_ole.rb +0 -27
  117. data/lib/rex/ole/samples/dir.rb +0 -35
  118. data/lib/rex/ole/samples/dump_stream.rb +0 -34
  119. data/lib/rex/ole/samples/ole_info.rb +0 -23
  120. data/lib/rex/ole/storage.rb +0 -395
  121. data/lib/rex/ole/stream.rb +0 -53
  122. data/lib/rex/ole/substorage.rb +0 -49
  123. data/lib/rex/ole/util.rb +0 -157
  124. data/lib/rex/parser/arguments.rb +0 -97
  125. data/lib/rex/parser/arguments.rb.ut.rb +0 -67
  126. data/lib/rex/parser/ini.rb +0 -185
  127. data/lib/rex/parser/ini.rb.ut.rb +0 -29
  128. data/lib/rex/parser/ip360_aspl_xml.rb +0 -102
  129. data/lib/rex/parser/ip360_xml.rb +0 -93
  130. data/lib/rex/parser/nessus_xml.rb +0 -118
  131. data/lib/rex/parser/netsparker_xml.rb +0 -94
  132. data/lib/rex/parser/nexpose_xml.rb +0 -131
  133. data/lib/rex/parser/nmap_xml.rb +0 -121
  134. data/lib/rex/parser/retina_xml.rb +0 -109
  135. data/lib/rex/payloads.rb +0 -1
  136. data/lib/rex/payloads/win32.rb +0 -2
  137. data/lib/rex/payloads/win32/common.rb +0 -26
  138. data/lib/rex/payloads/win32/kernel.rb +0 -53
  139. data/lib/rex/payloads/win32/kernel/common.rb +0 -54
  140. data/lib/rex/payloads/win32/kernel/migration.rb +0 -12
  141. data/lib/rex/payloads/win32/kernel/recovery.rb +0 -50
  142. data/lib/rex/payloads/win32/kernel/stager.rb +0 -194
  143. data/lib/rex/peparsey.rb +0 -12
  144. data/lib/rex/peparsey/exceptions.rb +0 -32
  145. data/lib/rex/peparsey/pe.rb +0 -212
  146. data/lib/rex/peparsey/pe_memdump.rb +0 -63
  147. data/lib/rex/peparsey/pebase.rb +0 -1680
  148. data/lib/rex/peparsey/section.rb +0 -136
  149. data/lib/rex/pescan.rb +0 -13
  150. data/lib/rex/pescan/analyze.rb +0 -309
  151. data/lib/rex/pescan/scanner.rb +0 -206
  152. data/lib/rex/pescan/search.rb +0 -56
  153. data/lib/rex/platforms.rb +0 -1
  154. data/lib/rex/platforms/windows.rb +0 -51
  155. data/lib/rex/poly.rb +0 -132
  156. data/lib/rex/poly/block.rb +0 -477
  157. data/lib/rex/poly/register.rb +0 -100
  158. data/lib/rex/poly/register/x86.rb +0 -40
  159. data/lib/rex/post.rb +0 -8
  160. data/lib/rex/post/dir.rb +0 -51
  161. data/lib/rex/post/file.rb +0 -172
  162. data/lib/rex/post/file_stat.rb +0 -220
  163. data/lib/rex/post/gen.pl +0 -13
  164. data/lib/rex/post/io.rb +0 -182
  165. data/lib/rex/post/meterpreter.rb +0 -4
  166. data/lib/rex/post/meterpreter/channel.rb +0 -445
  167. data/lib/rex/post/meterpreter/channel_container.rb +0 -54
  168. data/lib/rex/post/meterpreter/channels/pool.rb +0 -160
  169. data/lib/rex/post/meterpreter/channels/pools/file.rb +0 -62
  170. data/lib/rex/post/meterpreter/channels/pools/stream_pool.rb +0 -103
  171. data/lib/rex/post/meterpreter/channels/stream.rb +0 -87
  172. data/lib/rex/post/meterpreter/client.rb +0 -364
  173. data/lib/rex/post/meterpreter/client_core.rb +0 -274
  174. data/lib/rex/post/meterpreter/dependencies.rb +0 -3
  175. data/lib/rex/post/meterpreter/extension.rb +0 -32
  176. data/lib/rex/post/meterpreter/extensions/espia/espia.rb +0 -58
  177. data/lib/rex/post/meterpreter/extensions/espia/tlv.rb +0 -16
  178. data/lib/rex/post/meterpreter/extensions/incognito/incognito.rb +0 -94
  179. data/lib/rex/post/meterpreter/extensions/incognito/tlv.rb +0 -21
  180. data/lib/rex/post/meterpreter/extensions/networkpug/networkpug.rb +0 -57
  181. data/lib/rex/post/meterpreter/extensions/networkpug/tlv.rb +0 -15
  182. data/lib/rex/post/meterpreter/extensions/priv/fs.rb +0 -118
  183. data/lib/rex/post/meterpreter/extensions/priv/passwd.rb +0 -61
  184. data/lib/rex/post/meterpreter/extensions/priv/priv.rb +0 -111
  185. data/lib/rex/post/meterpreter/extensions/priv/tlv.rb +0 -28
  186. data/lib/rex/post/meterpreter/extensions/sniffer/sniffer.rb +0 -101
  187. data/lib/rex/post/meterpreter/extensions/sniffer/tlv.rb +0 -26
  188. data/lib/rex/post/meterpreter/extensions/stdapi/constants.rb +0 -333
  189. data/lib/rex/post/meterpreter/extensions/stdapi/fs/dir.rb +0 -282
  190. data/lib/rex/post/meterpreter/extensions/stdapi/fs/file.rb +0 -266
  191. data/lib/rex/post/meterpreter/extensions/stdapi/fs/file_stat.rb +0 -103
  192. data/lib/rex/post/meterpreter/extensions/stdapi/fs/io.rb +0 -48
  193. data/lib/rex/post/meterpreter/extensions/stdapi/net/config.rb +0 -144
  194. data/lib/rex/post/meterpreter/extensions/stdapi/net/interface.rb +0 -73
  195. data/lib/rex/post/meterpreter/extensions/stdapi/net/route.rb +0 -56
  196. data/lib/rex/post/meterpreter/extensions/stdapi/net/socket.rb +0 -137
  197. data/lib/rex/post/meterpreter/extensions/stdapi/net/socket_subsystem/tcp_client_channel.rb +0 -180
  198. data/lib/rex/post/meterpreter/extensions/stdapi/net/socket_subsystem/tcp_server_channel.rb +0 -167
  199. data/lib/rex/post/meterpreter/extensions/stdapi/net/socket_subsystem/udp_channel.rb +0 -208
  200. data/lib/rex/post/meterpreter/extensions/stdapi/railgun.rb.ts.rb +0 -6
  201. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/api_constants.rb +0 -38106
  202. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/api_constants.rb.ut.rb +0 -31
  203. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/buffer_item.rb +0 -47
  204. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/buffer_item.rb.ut.rb +0 -36
  205. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_advapi32.rb +0 -1818
  206. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_iphlpapi.rb +0 -96
  207. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_kernel32.rb +0 -3848
  208. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_netapi32.rb +0 -26
  209. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_ntdll.rb +0 -153
  210. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_shell32.rb +0 -21
  211. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_user32.rb +0 -3169
  212. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/def/def_ws2_32.rb +0 -599
  213. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/dll.rb +0 -318
  214. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/dll_function.rb +0 -100
  215. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/dll_function.rb.ut.rb +0 -42
  216. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/dll_helper.rb +0 -148
  217. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/dll_helper.rb.ut.rb +0 -127
  218. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/multicall.rb +0 -309
  219. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/railgun.rb +0 -204
  220. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/tlv.rb +0 -51
  221. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/util.rb +0 -630
  222. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/win_const_manager.rb +0 -75
  223. data/lib/rex/post/meterpreter/extensions/stdapi/railgun/win_const_manager.rb.ut.rb +0 -103
  224. data/lib/rex/post/meterpreter/extensions/stdapi/stdapi.rb +0 -149
  225. data/lib/rex/post/meterpreter/extensions/stdapi/sys/config.rb +0 -97
  226. data/lib/rex/post/meterpreter/extensions/stdapi/sys/event_log.rb +0 -192
  227. data/lib/rex/post/meterpreter/extensions/stdapi/sys/event_log_subsystem/event_record.rb +0 -41
  228. data/lib/rex/post/meterpreter/extensions/stdapi/sys/power.rb +0 -61
  229. data/lib/rex/post/meterpreter/extensions/stdapi/sys/process.rb +0 -370
  230. data/lib/rex/post/meterpreter/extensions/stdapi/sys/process_subsystem/image.rb +0 -129
  231. data/lib/rex/post/meterpreter/extensions/stdapi/sys/process_subsystem/io.rb +0 -55
  232. data/lib/rex/post/meterpreter/extensions/stdapi/sys/process_subsystem/memory.rb +0 -336
  233. data/lib/rex/post/meterpreter/extensions/stdapi/sys/process_subsystem/thread.rb +0 -141
  234. data/lib/rex/post/meterpreter/extensions/stdapi/sys/registry.rb +0 -279
  235. data/lib/rex/post/meterpreter/extensions/stdapi/sys/registry_subsystem/registry_key.rb +0 -193
  236. data/lib/rex/post/meterpreter/extensions/stdapi/sys/registry_subsystem/registry_value.rb +0 -102
  237. data/lib/rex/post/meterpreter/extensions/stdapi/sys/thread.rb +0 -180
  238. data/lib/rex/post/meterpreter/extensions/stdapi/tlv.rb +0 -211
  239. data/lib/rex/post/meterpreter/extensions/stdapi/ui.rb +0 -227
  240. data/lib/rex/post/meterpreter/extensions/stdapi/webcam/webcam.rb +0 -63
  241. data/lib/rex/post/meterpreter/inbound_packet_handler.rb +0 -30
  242. data/lib/rex/post/meterpreter/object_aliases.rb +0 -83
  243. data/lib/rex/post/meterpreter/packet.rb +0 -688
  244. data/lib/rex/post/meterpreter/packet_dispatcher.rb +0 -431
  245. data/lib/rex/post/meterpreter/packet_parser.rb +0 -94
  246. data/lib/rex/post/meterpreter/packet_response_waiter.rb +0 -83
  247. data/lib/rex/post/meterpreter/ui/console.rb +0 -137
  248. data/lib/rex/post/meterpreter/ui/console/command_dispatcher.rb +0 -62
  249. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/core.rb +0 -730
  250. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/espia.rb +0 -108
  251. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/incognito.rb +0 -241
  252. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/networkpug.rb +0 -231
  253. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/priv.rb +0 -61
  254. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/priv/elevate.rb +0 -98
  255. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/priv/passwd.rb +0 -51
  256. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/priv/timestomp.rb +0 -132
  257. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/sniffer.rb +0 -187
  258. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi.rb +0 -65
  259. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi/fs.rb +0 -442
  260. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi/net.rb +0 -298
  261. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi/sys.rb +0 -486
  262. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi/ui.rb +0 -315
  263. data/lib/rex/post/meterpreter/ui/console/command_dispatcher/stdapi/webcam.rb +0 -157
  264. data/lib/rex/post/meterpreter/ui/console/interactive_channel.rb +0 -95
  265. data/lib/rex/post/permission.rb +0 -26
  266. data/lib/rex/post/process.rb +0 -57
  267. data/lib/rex/post/thread.rb +0 -57
  268. data/lib/rex/post/ui.rb +0 -52
  269. data/lib/rex/proto.rb +0 -13
  270. data/lib/rex/proto.rb.ts.rb +0 -8
  271. data/lib/rex/proto/dcerpc.rb +0 -6
  272. data/lib/rex/proto/dcerpc.rb.ts.rb +0 -9
  273. data/lib/rex/proto/dcerpc/client.rb +0 -361
  274. data/lib/rex/proto/dcerpc/client.rb.ut.rb +0 -491
  275. data/lib/rex/proto/dcerpc/exceptions.rb +0 -150
  276. data/lib/rex/proto/dcerpc/handle.rb +0 -47
  277. data/lib/rex/proto/dcerpc/handle.rb.ut.rb +0 -85
  278. data/lib/rex/proto/dcerpc/ndr.rb +0 -72
  279. data/lib/rex/proto/dcerpc/ndr.rb.ut.rb +0 -41
  280. data/lib/rex/proto/dcerpc/packet.rb +0 -253
  281. data/lib/rex/proto/dcerpc/packet.rb.ut.rb +0 -56
  282. data/lib/rex/proto/dcerpc/response.rb +0 -187
  283. data/lib/rex/proto/dcerpc/response.rb.ut.rb +0 -15
  284. data/lib/rex/proto/dcerpc/uuid.rb +0 -84
  285. data/lib/rex/proto/dcerpc/uuid.rb.ut.rb +0 -46
  286. data/lib/rex/proto/dhcp.rb +0 -7
  287. data/lib/rex/proto/dhcp/constants.rb +0 -33
  288. data/lib/rex/proto/dhcp/server.rb +0 -292
  289. data/lib/rex/proto/drda.rb +0 -5
  290. data/lib/rex/proto/drda.rb.ts.rb +0 -17
  291. data/lib/rex/proto/drda/constants.rb +0 -49
  292. data/lib/rex/proto/drda/constants.rb.ut.rb +0 -23
  293. data/lib/rex/proto/drda/packet.rb +0 -252
  294. data/lib/rex/proto/drda/packet.rb.ut.rb +0 -109
  295. data/lib/rex/proto/drda/utils.rb +0 -123
  296. data/lib/rex/proto/drda/utils.rb.ut.rb +0 -84
  297. data/lib/rex/proto/http.rb +0 -5
  298. data/lib/rex/proto/http.rb.ts.rb +0 -12
  299. data/lib/rex/proto/http/client.rb +0 -821
  300. data/lib/rex/proto/http/client.rb.ut.rb +0 -95
  301. data/lib/rex/proto/http/handler.rb +0 -46
  302. data/lib/rex/proto/http/handler/erb.rb +0 -128
  303. data/lib/rex/proto/http/handler/erb.rb.ut.rb +0 -21
  304. data/lib/rex/proto/http/handler/erb.rb.ut.rb.rhtml +0 -1
  305. data/lib/rex/proto/http/handler/proc.rb +0 -60
  306. data/lib/rex/proto/http/handler/proc.rb.ut.rb +0 -24
  307. data/lib/rex/proto/http/header.rb +0 -161
  308. data/lib/rex/proto/http/header.rb.ut.rb +0 -46
  309. data/lib/rex/proto/http/packet.rb +0 -407
  310. data/lib/rex/proto/http/packet.rb.ut.rb +0 -165
  311. data/lib/rex/proto/http/request.rb +0 -356
  312. data/lib/rex/proto/http/request.rb.ut.rb +0 -214
  313. data/lib/rex/proto/http/response.rb +0 -90
  314. data/lib/rex/proto/http/response.rb.ut.rb +0 -149
  315. data/lib/rex/proto/http/server.rb +0 -369
  316. data/lib/rex/proto/http/server.rb.ut.rb +0 -79
  317. data/lib/rex/proto/ntlm.rb +0 -7
  318. data/lib/rex/proto/ntlm.rb.ut.rb +0 -177
  319. data/lib/rex/proto/ntlm/base.rb +0 -326
  320. data/lib/rex/proto/ntlm/constants.rb +0 -74
  321. data/lib/rex/proto/ntlm/crypt.rb +0 -415
  322. data/lib/rex/proto/ntlm/exceptions.rb +0 -9
  323. data/lib/rex/proto/ntlm/message.rb +0 -533
  324. data/lib/rex/proto/ntlm/utils.rb +0 -763
  325. data/lib/rex/proto/proxy/socks4a.rb +0 -440
  326. data/lib/rex/proto/rfb.rb +0 -19
  327. data/lib/rex/proto/rfb.rb.ut.rb +0 -37
  328. data/lib/rex/proto/rfb/cipher.rb +0 -84
  329. data/lib/rex/proto/rfb/client.rb +0 -207
  330. data/lib/rex/proto/rfb/constants.rb +0 -52
  331. data/lib/rex/proto/smb.rb +0 -7
  332. data/lib/rex/proto/smb.rb.ts.rb +0 -8
  333. data/lib/rex/proto/smb/client.rb +0 -1952
  334. data/lib/rex/proto/smb/client.rb.ut.rb +0 -223
  335. data/lib/rex/proto/smb/constants.rb +0 -1047
  336. data/lib/rex/proto/smb/constants.rb.ut.rb +0 -18
  337. data/lib/rex/proto/smb/crypt.rb +0 -36
  338. data/lib/rex/proto/smb/evasions.rb +0 -66
  339. data/lib/rex/proto/smb/exceptions.rb +0 -858
  340. data/lib/rex/proto/smb/simpleclient.rb +0 -306
  341. data/lib/rex/proto/smb/simpleclient.rb.ut.rb +0 -128
  342. data/lib/rex/proto/smb/utils.rb +0 -103
  343. data/lib/rex/proto/smb/utils.rb.ut.rb +0 -20
  344. data/lib/rex/proto/sunrpc.rb +0 -1
  345. data/lib/rex/proto/sunrpc/client.rb +0 -195
  346. data/lib/rex/proto/tftp.rb +0 -12
  347. data/lib/rex/proto/tftp/constants.rb +0 -39
  348. data/lib/rex/proto/tftp/server.rb +0 -497
  349. data/lib/rex/proto/tftp/server.rb.ut.rb +0 -28
  350. data/lib/rex/script.rb +0 -42
  351. data/lib/rex/script/base.rb +0 -59
  352. data/lib/rex/script/meterpreter.rb +0 -15
  353. data/lib/rex/script/shell.rb +0 -9
  354. data/lib/rex/service.rb +0 -48
  355. data/lib/rex/service_manager.rb +0 -141
  356. data/lib/rex/service_manager.rb.ut.rb +0 -32
  357. data/lib/rex/services/local_relay.rb +0 -423
  358. data/lib/rex/socket.rb +0 -684
  359. data/lib/rex/socket.rb.ut.rb +0 -107
  360. data/lib/rex/socket/comm.rb +0 -119
  361. data/lib/rex/socket/comm/local.rb +0 -412
  362. data/lib/rex/socket/comm/local.rb.ut.rb +0 -75
  363. data/lib/rex/socket/ip.rb +0 -130
  364. data/lib/rex/socket/parameters.rb +0 -345
  365. data/lib/rex/socket/parameters.rb.ut.rb +0 -51
  366. data/lib/rex/socket/range_walker.rb +0 -346
  367. data/lib/rex/socket/range_walker.rb.ut.rb +0 -55
  368. data/lib/rex/socket/ssl_tcp.rb +0 -184
  369. data/lib/rex/socket/ssl_tcp.rb.ut.rb +0 -39
  370. data/lib/rex/socket/ssl_tcp_server.rb +0 -122
  371. data/lib/rex/socket/ssl_tcp_server.rb.ut.rb +0 -61
  372. data/lib/rex/socket/subnet_walker.rb +0 -75
  373. data/lib/rex/socket/subnet_walker.rb.ut.rb +0 -28
  374. data/lib/rex/socket/switch_board.rb +0 -278
  375. data/lib/rex/socket/switch_board.rb.ut.rb +0 -52
  376. data/lib/rex/socket/tcp.rb +0 -76
  377. data/lib/rex/socket/tcp.rb.ut.rb +0 -64
  378. data/lib/rex/socket/tcp_server.rb +0 -67
  379. data/lib/rex/socket/tcp_server.rb.ut.rb +0 -44
  380. data/lib/rex/socket/udp.rb +0 -164
  381. data/lib/rex/socket/udp.rb.ut.rb +0 -44
  382. data/lib/rex/struct2.rb +0 -5
  383. data/lib/rex/struct2/c_struct.rb +0 -181
  384. data/lib/rex/struct2/c_struct_template.rb +0 -39
  385. data/lib/rex/struct2/constant.rb +0 -26
  386. data/lib/rex/struct2/element.rb +0 -44
  387. data/lib/rex/struct2/generic.rb +0 -73
  388. data/lib/rex/struct2/restraint.rb +0 -54
  389. data/lib/rex/struct2/s_string.rb +0 -72
  390. data/lib/rex/struct2/s_struct.rb +0 -111
  391. data/lib/rex/sync.rb +0 -6
  392. data/lib/rex/sync/event.rb +0 -94
  393. data/lib/rex/sync/read_write_lock.rb +0 -176
  394. data/lib/rex/sync/ref.rb +0 -57
  395. data/lib/rex/sync/thread_safe.rb +0 -82
  396. data/lib/rex/test.rb +0 -35
  397. data/lib/rex/text.rb +0 -1149
  398. data/lib/rex/text.rb.ut.rb +0 -190
  399. data/lib/rex/thread_factory.rb +0 -42
  400. data/lib/rex/time.rb +0 -65
  401. data/lib/rex/transformer.rb +0 -115
  402. data/lib/rex/transformer.rb.ut.rb +0 -38
  403. data/lib/rex/ui.rb +0 -21
  404. data/lib/rex/ui/interactive.rb +0 -254
  405. data/lib/rex/ui/output.rb +0 -78
  406. data/lib/rex/ui/output/none.rb +0 -18
  407. data/lib/rex/ui/progress_tracker.rb +0 -96
  408. data/lib/rex/ui/subscriber.rb +0 -149
  409. data/lib/rex/ui/text/color.rb +0 -97
  410. data/lib/rex/ui/text/color.rb.ut.rb +0 -18
  411. data/lib/rex/ui/text/dispatcher_shell.rb +0 -467
  412. data/lib/rex/ui/text/input.rb +0 -117
  413. data/lib/rex/ui/text/input/buffer.rb +0 -75
  414. data/lib/rex/ui/text/input/readline.rb +0 -129
  415. data/lib/rex/ui/text/input/socket.rb +0 -95
  416. data/lib/rex/ui/text/input/stdio.rb +0 -45
  417. data/lib/rex/ui/text/irb_shell.rb +0 -57
  418. data/lib/rex/ui/text/output.rb +0 -80
  419. data/lib/rex/ui/text/output/buffer.rb +0 -61
  420. data/lib/rex/ui/text/output/file.rb +0 -43
  421. data/lib/rex/ui/text/output/socket.rb +0 -43
  422. data/lib/rex/ui/text/output/stdio.rb +0 -40
  423. data/lib/rex/ui/text/progress_tracker.rb +0 -56
  424. data/lib/rex/ui/text/progress_tracker.rb.ut.rb +0 -34
  425. data/lib/rex/ui/text/shell.rb +0 -328
  426. data/lib/rex/ui/text/table.rb +0 -279
  427. data/lib/rex/ui/text/table.rb.ut.rb +0 -55
  428. data/lib/rex/zip.rb +0 -93
  429. data/lib/rex/zip/archive.rb +0 -184
  430. data/lib/rex/zip/blocks.rb +0 -182
  431. data/lib/rex/zip/entry.rb +0 -104
  432. data/lib/rex/zip/samples/comment.rb +0 -32
  433. data/lib/rex/zip/samples/mkwar.rb +0 -138
  434. data/lib/rex/zip/samples/mkzip.rb +0 -19
  435. data/lib/rex/zip/samples/recursive.rb +0 -58
data/lib/rex/socket.rb DELETED
@@ -1,684 +0,0 @@
1
- require 'socket'
2
- require 'thread'
3
- require 'resolv'
4
- require 'rex/exceptions'
5
-
6
- module Rex
7
-
8
- ###
9
- #
10
- # Base class for all sockets.
11
- #
12
- ###
13
- module Socket
14
-
15
- module Comm
16
- end
17
-
18
- require 'rex/socket/parameters'
19
- require 'rex/socket/tcp'
20
- require 'rex/socket/tcp_server'
21
-
22
- require 'rex/socket/comm'
23
- require 'rex/socket/comm/local'
24
-
25
- require 'rex/socket/switch_board'
26
- require 'rex/socket/subnet_walker'
27
- require 'rex/socket/range_walker'
28
-
29
- ##
30
- #
31
- # Factory methods
32
- #
33
- ##
34
-
35
- #
36
- # Create a socket instance using the supplied parameter hash.
37
- #
38
- def self.create(opts = {})
39
- return create_param(Rex::Socket::Parameters.from_hash(opts))
40
- end
41
-
42
- #
43
- # Create a socket using the supplied Rex::Socket::Parameter instance.
44
- #
45
- def self.create_param(param)
46
- return param.comm.create(param)
47
- end
48
-
49
- #
50
- # Create a TCP socket using the supplied parameter hash.
51
- #
52
- def self.create_tcp(opts = {})
53
- return create_param(Rex::Socket::Parameters.from_hash(opts.merge('Proto' => 'tcp')))
54
- end
55
-
56
- #
57
- # Create a TCP server socket using the supplied parameter hash.
58
- #
59
- def self.create_tcp_server(opts = {})
60
- return create_tcp(opts.merge('Server' => true))
61
- end
62
-
63
- #
64
- # Create a UDP socket using the supplied parameter hash.
65
- #
66
- def self.create_udp(opts = {})
67
- return create_param(Rex::Socket::Parameters.from_hash(opts.merge('Proto' => 'udp')))
68
- end
69
-
70
- #
71
- # Create a IP socket using the supplied parameter hash.
72
- #
73
- def self.create_ip(opts = {})
74
- return create_param(Rex::Socket::Parameters.from_hash(opts.merge('Proto' => 'ip')))
75
- end
76
-
77
- ##
78
- #
79
- # Serialization
80
- #
81
- ##
82
-
83
-
84
- # Cache our IPv6 support flag
85
- @@support_ipv6 = nil
86
-
87
- #
88
- # Determine whether we support IPv6
89
- #
90
- def self.support_ipv6?
91
- return @@support_ipv6 if not @@support_ipv6.nil?
92
-
93
- @@support_ipv6 = false
94
-
95
- if (::Socket.const_defined?('AF_INET6'))
96
- begin
97
- s = ::Socket.new(::Socket::AF_INET6, ::Socket::SOCK_DGRAM, ::Socket::IPPROTO_UDP)
98
- s.close
99
- @@support_ipv6 = true
100
- rescue
101
- end
102
- end
103
-
104
- return @@support_ipv6
105
- end
106
-
107
- #
108
- # Determine whether this is an IPv4 address
109
- #
110
- def self.is_ipv4?(addr)
111
- res = Rex::Socket.getaddress(addr)
112
- res.match(/:/) ? false : true
113
- end
114
-
115
- #
116
- # Determine whether this is an IPv6 address
117
- #
118
- def self.is_ipv6?(addr)
119
- res = Rex::Socket.getaddress(addr)
120
- res.match(/:/) ? true : false
121
- end
122
-
123
- #
124
- # Checks to see if the supplied address is a dotted quad.
125
- #
126
- def self.dotted_ip?(addr)
127
- # Assume anything with a colon is IPv6
128
- return true if (support_ipv6? and addr =~ /:/)
129
-
130
- # Otherwise assume this is IPv4
131
- (addr =~ /^(?:(?:25[0-5]|2[0-4][0-9]|[0-1]?[0-9]{1,2})[.](?:25[0-5]|2[0-4][0-9]|[0-1]?[0-9]{1,2})[.](?:25[0-5]|2[0-4][0-9]|[0-1]?[0-9]{1,2})[.](?:25[0-5]|2[0-4][0-9]|[0-1]?[0-9]{1,2}))$/) ? true : false
132
- end
133
-
134
- #
135
- # Return true if +addr+ is within the ranges specified in RFC1918, or
136
- # RFC5735/RFC3927
137
- #
138
- def self.is_internal?(addr)
139
- if self.dotted_ip?(addr)
140
- addr =~ /^(?:10\.|192\.168|172.(?:1[6-9]|2[0-9]|3[01])\.|169\.254)/
141
- else
142
- false
143
- end
144
- end
145
-
146
- #
147
- # Wrapper for Resolv.getaddress that takes special care to see if the
148
- # supplied address is already a dotted quad, for instance. This is
149
- # necessary to prevent calls to gethostbyaddr (which occurs on windows).
150
- # These calls can be quite slow. This also fixes an issue with the
151
- # Resolv.getaddress() call being non-functional on Ruby 1.9.1 (Win32).
152
- #
153
- def self.getaddress(addr, accept_ipv6 = true)
154
- begin
155
-
156
- if dotted_ip?(addr)
157
- return addr
158
- end
159
-
160
- res = ::Socket.gethostbyname(addr)
161
- return nil if not res
162
-
163
- # Shift the first three elements out
164
- rname = res.shift
165
- ralias = res.shift
166
- rtype = res.shift
167
-
168
- # Reject IPv6 addresses if we don't accept them
169
- if not accept_ipv6
170
- res.reject!{|nbo| nbo.length != 4}
171
- end
172
-
173
- # Make sure we have at least one name
174
- return nil if res.length == 0
175
-
176
- # Return the first address of the result
177
- self.addr_ntoa( res[0] )
178
- rescue ::ArgumentError # Win32 bug
179
- nil
180
- end
181
- end
182
-
183
- #
184
- # Wrapper for Socket.gethostbyname which takes into account whether or not
185
- # an IP address is supplied. If it is, then reverse DNS resolution does
186
- # not occur. This is done in order to prevent delays, such as would occur
187
- # on Windows.
188
- #
189
- def self.gethostbyname(host)
190
- if (dotted_ip?(host))
191
- if (is_ipv4?(host))
192
- return [ host, host, 2, host.split('.').map{ |c| c.to_i }.pack("C4") ]
193
- end
194
- end
195
-
196
- ::Socket.gethostbyname(host)
197
- end
198
-
199
- #
200
- # Create a sockaddr structure using the supplied IP address, port, and
201
- # address family
202
- #
203
- def self.to_sockaddr(ip, port)
204
-
205
- if (ip == '::ffff:0.0.0.0')
206
- ip = support_ipv6?() ? '::' : '0.0.0.0'
207
- end
208
-
209
- return ::Socket.pack_sockaddr_in(port, ip)
210
- end
211
-
212
- #
213
- # Returns the address family, host, and port of the supplied sockaddr as
214
- # [ af, host, port ]
215
- #
216
- def self.from_sockaddr(saddr)
217
- port, host = ::Socket::unpack_sockaddr_in(saddr)
218
- af = ::Socket::AF_INET
219
- if (support_ipv6?() and is_ipv6?(host))
220
- af = ::Socket::AF_INET6
221
- end
222
- return [ af, host, port ]
223
- end
224
-
225
- #
226
- # Resolves a host to raw network-byte order.
227
- #
228
- def self.resolv_nbo(host)
229
- self.gethostbyname(Rex::Socket.getaddress(host))[3]
230
- end
231
-
232
- #
233
- # Resolves a host to a network-byte order ruby integer.
234
- #
235
- def self.resolv_nbo_i(host)
236
- addr_ntoi(resolv_nbo(host))
237
- end
238
-
239
- #
240
- # Converts an ASCII IP address to a CIDR mask. Returns
241
- # nil if it's not convertable.
242
- #
243
- def self.addr_atoc(mask)
244
- mask_i = resolv_nbo_i(mask)
245
- cidr = nil
246
- 0.upto(32) do |i|
247
- if ((1 << i)-1) << (32-i) == mask_i
248
- cidr = i
249
- break
250
- end
251
- end
252
- return cidr
253
- end
254
-
255
- #
256
- # Resolves a CIDR bitmask into a dotted-quad. Returns
257
- # nil if it's not convertable.
258
- #
259
- def self.addr_ctoa(cidr)
260
- return nil unless (0..32) === cidr.to_i
261
- addr_itoa(((1 << cidr)-1) << 32-cidr)
262
- end
263
-
264
- #
265
- # Resolves a host to a dotted address.
266
- #
267
- def self.resolv_to_dotted(host)
268
- addr_ntoa(addr_aton(host))
269
- end
270
-
271
- #
272
- # Converts a ascii address into an integer
273
- #
274
- def self.addr_atoi(addr)
275
- resolv_nbo_i(addr)
276
- end
277
-
278
- #
279
- # Converts an integer address into ascii
280
- #
281
- def self.addr_itoa(addr, v6=false)
282
-
283
- nboa = addr_iton(addr, v6)
284
-
285
- # IPv4
286
- if (addr < 0x100000000 and not v6)
287
- nboa.unpack('C4').join('.')
288
- # IPv6
289
- else
290
- nboa.unpack('n8').map{ |c| "%.4x" % c }.join(":")
291
- end
292
- end
293
-
294
- #
295
- # Converts a ascii address to network byte order
296
- #
297
- def self.addr_aton(addr)
298
- resolv_nbo(addr)
299
- end
300
-
301
- #
302
- # Converts a network byte order address to ascii
303
- #
304
- def self.addr_ntoa(addr)
305
-
306
- # IPv4
307
- if (addr.length == 4)
308
- return addr.unpack('C4').join('.')
309
- end
310
-
311
- # IPv6
312
- if (addr.length == 16)
313
- return addr.unpack('n8').map{ |c| "%.4x" % c }.join(":")
314
- end
315
-
316
- raise RuntimeError, "Invalid address format"
317
- end
318
-
319
- #
320
- # Converts a network byte order address to an integer
321
- #
322
- def self.addr_ntoi(addr)
323
-
324
- bits = addr.unpack("N*")
325
-
326
- if (bits.length == 1)
327
- return bits[0]
328
- end
329
-
330
- if (bits.length == 4)
331
- val = 0
332
- bits.each_index { |i| val += ( bits[i] << (96 - (i * 32)) ) }
333
- return val
334
- end
335
-
336
- raise RuntimeError, "Invalid address format"
337
- end
338
-
339
- #
340
- # Converts an integer into a network byte order address
341
- #
342
- def self.addr_iton(addr, v6=false)
343
- if(addr < 0x100000000 and not v6)
344
- return [addr].pack('N')
345
- else
346
- w = []
347
- w[0] = (addr >> 96) & 0xffffffff
348
- w[1] = (addr >> 64) & 0xffffffff
349
- w[2] = (addr >> 32) & 0xffffffff
350
- w[3] = addr & 0xffffffff
351
- return w.pack('N4')
352
- end
353
- end
354
-
355
- #
356
- # Converts a CIDR subnet into an array (base, bcast)
357
- #
358
- def self.cidr_crack(cidr, v6=false)
359
- tmp = cidr.split('/')
360
-
361
- tst,scope = tmp[0].split("%",2)
362
- scope = "%" + scope if scope
363
- scope ||= ""
364
-
365
- addr = addr_atoi(tst)
366
-
367
- bits = 32
368
- mask = 0
369
- use6 = false
370
-
371
- if (addr > 0xffffffff or v6 or cidr =~ /:/)
372
- use6 = true
373
- bits = 128
374
- end
375
-
376
- mask = (2 ** bits) - (2 ** (bits - tmp[1].to_i))
377
- base = addr & mask
378
-
379
- stop = base + (2 ** (bits - tmp[1].to_i)) - 1
380
- return [self.addr_itoa(base, use6) + scope, self.addr_itoa(stop, use6) + scope]
381
- end
382
-
383
- #
384
- # Converts a netmask (255.255.255.240) into a bitmask (28). This is the
385
- # lame kid way of doing it.
386
- #
387
- def self.net2bitmask(netmask)
388
-
389
- nmask = resolv_nbo(netmask)
390
- imask = addr_ntoi(nmask)
391
- bits = 32
392
-
393
- if (imask > 0xffffffff)
394
- bits = 128
395
- end
396
-
397
- 0.upto(bits-1) do |bit|
398
- p = 2 ** bit
399
- return (bits - bit) if ((imask & p) == p)
400
- end
401
-
402
- 0
403
- end
404
-
405
- #
406
- # Converts a bitmask (28) into a netmask (255.255.255.240)
407
- # TODO: IPv6 (use is ambiguous right now)
408
- #
409
- def self.bit2netmask(bitmask)
410
- [ (~((2 ** (32 - bitmask)) - 1)) & 0xffffffff ].pack('N').unpack('CCCC').join('.')
411
- end
412
-
413
-
414
- def self.portspec_crack(pspec)
415
- portspec_to_portlist(pspec)
416
- end
417
-
418
- #
419
- # Converts a port specification like "80,21-23,443" into a sorted,
420
- # unique array of valid port numbers like [21,22,23,80,443]
421
- #
422
- def self.portspec_to_portlist(pspec)
423
- ports = []
424
-
425
- # Build ports array from port specification
426
- pspec.split(/,/).each do |item|
427
- start, stop = item.split(/-/).map { |p| p.to_i }
428
-
429
- start ||= 0
430
- stop ||= item.match(/-/) ? 65535 : start
431
-
432
- start, stop = stop, start if stop < start
433
-
434
- start.upto(stop) { |p| ports << p }
435
- end
436
-
437
- # Sort, and remove dups and invalid ports
438
- ports.sort.uniq.delete_if { |p| p < 1 or p > 65535 }
439
- end
440
-
441
- #
442
- # Converts a port list like [1,2,3,4,5,100] into a
443
- # range specification like "1-5,100"
444
- #
445
- def self.portlist_to_portspec(parr)
446
- ranges = []
447
- range = []
448
- lastp = nil
449
-
450
- parr.uniq.sort{|a,b| a<=>b}.map{|a| a.to_i}.each do |n|
451
- next if (n < 1 or n > 65535)
452
- if not lastp
453
- range = [n]
454
- lastp = n
455
- next
456
- end
457
-
458
- if lastp == n - 1
459
- range << n
460
- else
461
- ranges << range
462
- range = [n]
463
- end
464
- lastp = n
465
- end
466
-
467
- ranges << range
468
- ranges.delete(nil)
469
- ranges.uniq.map{|x| x.length == 1 ? "#{x[0]}" : "#{x[0]}-#{x[-1]}"}.join(",")
470
- end
471
-
472
- ##
473
- #
474
- # Utility class methods
475
- #
476
- ##
477
-
478
- #
479
- # This method does NOT send any traffic to the destination, instead, it uses a
480
- # "bound" UDP socket to determine what source address we would use to
481
- # communicate with the specified destination. The destination defaults to
482
- # Google's DNS server to make the standard behavior determine which IP
483
- # we would use to communicate with the internet.
484
- #
485
- def self.source_address(dest='8.8.8.8', comm = ::Rex::Socket::Comm::Local)
486
- begin
487
- s = self.create_udp(
488
- 'PeerHost' => dest,
489
- 'PeerPort' => 31337,
490
- 'Comm' => comm
491
- )
492
- r = s.getsockname[1]
493
- s.close
494
-
495
- # Trim off the trailing interface ID for link-local IPv6
496
- return r.split('%').first
497
- rescue ::Exception
498
- return '127.0.0.1'
499
- end
500
- end
501
-
502
- #
503
- # Identifies the link-local address of a given interface (if IPv6 is enabled)
504
- #
505
- def self.ipv6_link_address(intf)
506
- r = source_address("FF02::1%#{intf}")
507
- return if not (r and r =~ /^fe80/i)
508
- r
509
- end
510
-
511
- #
512
- # Identifies the mac address of a given interface (if IPv6 is enabled)
513
- #
514
- def self.ipv6_mac(intf)
515
- r = ipv6_link_address(intf)
516
- return if not r
517
- raw = addr_aton(r)[-8, 8]
518
- (raw[0,3] + raw[5,3]).unpack("C*").map{|c| "%.2x" % c}.join(":")
519
- end
520
-
521
- #
522
- # Create a TCP socket pair.
523
- #
524
- # sf: This create a socket pair using native ruby sockets and will work
525
- # on Windows where ::Socket.pair is not implemented.
526
- # Note: OpenSSL requires native ruby sockets for its io.
527
- #
528
- # Note: Even though sub-threads are smashing the parent threads local, there
529
- # is no concurrent use of the same locals and this is safe.
530
- def self.tcp_socket_pair
531
- lsock = nil
532
- rsock = nil
533
- laddr = '127.0.0.1'
534
- lport = 0
535
- threads = []
536
- mutex = ::Mutex.new
537
-
538
- threads << Rex::ThreadFactory.spawn('TcpSocketPair', false) {
539
- server = nil
540
- mutex.synchronize {
541
- threads << Rex::ThreadFactory.spawn('TcpSocketPairClient', false) {
542
- mutex.synchronize {
543
- rsock = ::TCPSocket.new( laddr, lport )
544
- }
545
- }
546
- server = ::TCPServer.new(laddr, 0)
547
- if (server.getsockname =~ /127\.0\.0\.1:/)
548
- # JRuby ridiculousness
549
- caddr, lport = server.getsockname.split(":")
550
- caddr = caddr[1,caddr.length]
551
- lport = lport.to_i
552
- else
553
- # Sane implementations where Socket#getsockname returns a
554
- # sockaddr
555
- lport, caddr = ::Socket.unpack_sockaddr_in( server.getsockname )
556
- end
557
- }
558
- lsock, saddr = server.accept
559
- server.close
560
- }
561
-
562
- threads.each { |t| t.join }
563
-
564
- return [lsock, rsock]
565
- end
566
-
567
- #
568
- # Create a UDP socket pair using native ruby UDP sockets.
569
- #
570
- def self.udp_socket_pair
571
- laddr = '127.0.0.1'
572
-
573
- lsock = ::UDPSocket.new
574
- lsock.bind( laddr, 0 )
575
-
576
- rsock = ::UDPSocket.new
577
- rsock.bind( laddr, 0 )
578
-
579
- rsock.connect( *lsock.addr.values_at(3,1) )
580
-
581
- lsock.connect( *rsock.addr.values_at(3,1) )
582
-
583
- return [lsock, rsock]
584
- end
585
-
586
- ##
587
- #
588
- # Class initialization
589
- #
590
- ##
591
-
592
- #
593
- # Initialize general socket parameters.
594
- #
595
- def initsock(params = nil)
596
- if (params)
597
- self.peerhost = params.peerhost
598
- self.peerport = params.peerport
599
- self.localhost = params.localhost
600
- self.localport = params.localport
601
- self.context = params.context || {}
602
- self.ipv = params.v6 ? 6 : 4
603
- end
604
- end
605
-
606
- #
607
- # By default, all sockets are themselves selectable file descriptors.
608
- #
609
- def fd
610
- self
611
- end
612
-
613
- #
614
- # Returns local connection information.
615
- #
616
- def getsockname
617
- Socket.from_sockaddr(super)
618
- end
619
-
620
- #
621
- # Wrapper around getsockname
622
- #
623
- def getlocalname
624
- getsockname
625
- end
626
-
627
- #
628
- # Return peer connection information.
629
- #
630
- def getpeername
631
- return Socket.from_sockaddr(super)
632
- end
633
-
634
- #
635
- # Returns a string that indicates the type of the socket, such as 'tcp'.
636
- #
637
- def type?
638
- raise NotImplementedError, "Socket type is not supported."
639
- end
640
-
641
- #
642
- # The peer host of the connected socket.
643
- #
644
- attr_reader :peerhost
645
- #
646
- # The peer port of the connected socket.
647
- #
648
- attr_reader :peerport
649
- #
650
- # The local host of the connected socket.
651
- #
652
- attr_reader :localhost
653
- #
654
- # The local port of the connected socket.
655
- #
656
- attr_reader :localport
657
- #
658
- # The IP version of the socket
659
- #
660
- attr_reader :ipv
661
- #
662
- # Contextual information that describes the source and other
663
- # instance-specific attributes. This comes from the param.context
664
- # attribute.
665
- #
666
- attr_reader :context
667
-
668
- protected
669
-
670
- attr_writer :peerhost, :peerport, :localhost, :localport # :nodoc:
671
- attr_writer :context # :nodoc:
672
- attr_writer :ipv # :nodoc:
673
-
674
- end
675
-
676
- end
677
-
678
- #
679
- # Globalized socket constants
680
- #
681
- SHUT_RDWR = ::Socket::SHUT_RDWR
682
- SHUT_RD = ::Socket::SHUT_RD
683
- SHUT_WR = ::Socket::SHUT_WR
684
-