l-tools 0.1.1 → 0.1.2

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f9eb6b4a8fca9a19f2ea318a0183d89552fd917a2949c7238a48a35ec422e59f
4
- data.tar.gz: d976226b46ef89712d57b217c636fa6bc3ff84588de5d714310a4d590246ff29
3
+ metadata.gz: ccdd5035905c71206c23c250d80cc02537f20e77f261c1857b8fcba1e1267002
4
+ data.tar.gz: 77d587a78592e701095ed8c028a33b66bf0914ecb4f8b28f885d98d97f874ed3
5
5
  SHA512:
6
- metadata.gz: 8ba5b0192edb76cf5bec9d1fea39c458f4b2d354d851d9b8da9398175e12b4ea4760c60503b4da3191e25861049ec115c55492da71abab9ca7d42bd428c5c097
7
- data.tar.gz: 4fd9649d94db1fdf0bdf97a07408a892dfe48948b756e145be70edb5dbdd5b4d6f2b8ecad5c9c5389658c0fde5d66b04b88a5f8121715b0838a2f70d16b4feee
6
+ metadata.gz: f06fc28f33a40886f6b69a174b4c2bc58045c09c729c1f00973c0c960103065b1e14cef3a4797eafc14b709a3aa13234cea36c13d0b314f804d981f9340a1c75
7
+ data.tar.gz: 95cd3a893be065f6d9afaadbf38fbd6e96870483e073a087651bf9afff127873a92b7c0e08e153759f36829a07d6151ec9aa906cb0a3914a2428f4922356964a
data/lib/core/opts.rb ADDED
@@ -0,0 +1,37 @@
1
+
2
+ module LTools
3
+ class Tool
4
+ class ToolOpts
5
+ def self.build(&block)
6
+ new(&block).to_s
7
+ end
8
+
9
+ def initialize
10
+ @args = []
11
+ yield self if block_given?
12
+ end
13
+
14
+ def on(opt, value, &block)
15
+ if value
16
+ value = block.call(value) if block
17
+ if value
18
+ @args << opt if opt
19
+ @args << value
20
+ end
21
+ end
22
+ end
23
+
24
+ def to_s
25
+ to_str
26
+ end
27
+
28
+ def to_str
29
+ " #{Shellwords.join(@args)} "
30
+ end
31
+
32
+ def to_a
33
+ @args
34
+ end
35
+ end
36
+ end
37
+ end
@@ -7,11 +7,12 @@ ChildProcess.posix_spawn = true
7
7
 
8
8
  module LTools
9
9
  autoload :Shellwords, 'shellwords'
10
+ autoload :Tempfile, 'tempfile'
10
11
 
11
12
  class Tool
12
13
  extend Forwardable
13
14
 
14
- attr_reader :stdin, :stdout, :stderr
15
+ attr_reader :stdin, :stdout, :stderr, :cmd
15
16
  attr_accessor :verbose
16
17
 
17
18
  def_delegators :@process, :stop, :pid, :exited?, \
@@ -53,7 +54,7 @@ module LTools
53
54
  @stdin = @process.io.stdin unless @inherit
54
55
  if @verbose
55
56
  puts "[#{'+'.light_green.bold}] #{self.class.to_s.light_yellow} (pid: #{pid})"
56
- puts " #{?$.light_red.bold} #{@cmd.join(' ')}"
57
+ puts " #{?$.light_red.bold} #{command}"
57
58
  puts
58
59
  end
59
60
  end
@@ -70,6 +71,20 @@ module LTools
70
71
  @stderr_w.close
71
72
  end
72
73
 
74
+ def command
75
+ @cmd.map{|str|
76
+ if str.include?(' ')
77
+ if str.include? '"'
78
+ "'#{str}'"
79
+ else
80
+ "\"#{str}\""
81
+ end
82
+ else
83
+ str
84
+ end
85
+ }.join ' '
86
+ end
87
+
73
88
  def io_inherit!
74
89
  @inherit = true
75
90
  @process.io.inherit!
data/lib/l-tools.rb CHANGED
@@ -1,9 +1,11 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
3
  module LTools
4
- autoload :Tool, 'tools/tool'
5
- autoload :Tshark, 'tools/tshark'
6
- autoload :Nmap, 'tools/nmap'
4
+ autoload :Tool, 'core/tool'
5
+ autoload :ToolOpts, 'core/opts'
6
+
7
+ autoload :Tshark, 'tools/tshark'
8
+ autoload :Nmap, 'tools/nmap'
7
9
 
8
10
  @tools = []
9
11
 
data/lib/tools/nmap.rb CHANGED
@@ -3,13 +3,46 @@ module LTools
3
3
  class Nmap < Tool
4
4
  @name = 'nmap'
5
5
 
6
- def self.portscan(targets, ports: nil, mode: 'S', speed: 5, append: nil)
6
+ # TODO 非正常退出的情况, Root权限问题
7
+ def self.portscan(targets, ports: nil, mode: 'S', speed: 5, xml_report: nil, append: nil)
7
8
  cmd = "nmap -Pn -n -T#{speed} -s#{mode}"
8
- cmd << " -p #{ports} " if ports
9
- targets = targets.join(' ') if targets.is_a? Array
10
- cmd << targets
11
- cmd << append if append
9
+ cmd << ToolOpts.build {|opts|
10
+ opts.on('-p', ports)
11
+ opts.on('-oX', xml_report){ |file|
12
+ break file unless file == :auto
13
+ @nmap_xml_report = Tempfile.new('ltools-nmap-xml-report')
14
+ @nmap_xml_report.close
15
+ @nmap_xml_report.to_path
16
+ }
17
+ }
18
+ cmd << self.targets_cmd(targets)
19
+ cmd << append if append
12
20
  new cmd
13
21
  end
22
+
23
+ def self.targets_cmd(targets)
24
+ case targets
25
+ when Array
26
+ if targets.size < 8
27
+ targets.join ' '
28
+ else
29
+ infile = Tempfile.new('ltools-nmap-')
30
+ infile.puts targets
31
+ infile.close
32
+ "-iL #{infile.to_path}"
33
+ end
34
+ when String
35
+ File.file?(targets) ? "-iL #{targets}" : targets
36
+ end
37
+ end
38
+
39
+ def xml_report
40
+ require 'nmap/xml'
41
+ if index = @cmd.index('-oX')
42
+ file = @cmd[index+1]
43
+ puts File.binread(file)
44
+ ::Nmap::XML.new(file)
45
+ end
46
+ end
14
47
  end
15
48
  end
data/lib/tools/tshark.rb CHANGED
@@ -5,9 +5,11 @@ module LTools
5
5
 
6
6
  def self.capture(interface: nil, bpf: nil, fields:nil, filter: nil, append: nil)
7
7
  cmd = 'tshark'
8
- cmd << " -i '#{interface}'" if interface
9
- cmd << " -f '#{bpf}'" if bpf
10
- cmd << " -Y '#{filter}'" if filter
8
+ cmd << ToolOpts.build {|opts|
9
+ opts.on('-i', interface)
10
+ opts.on('-f', bpf)
11
+ opts.on('-Y', filter)
12
+ }
11
13
  if fields
12
14
  fields = fields.split if fields.is_a? String
13
15
  fields.unshift ' -T fields'
data/lib/version.rb CHANGED
@@ -1,4 +1,4 @@
1
1
 
2
2
  module LTools
3
- VERSION = "0.1.1"
3
+ VERSION = "0.1.2"
4
4
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: l-tools
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - L
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-12-29 00:00:00.000000000 Z
11
+ date: 2018-12-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: childprocess
@@ -62,9 +62,10 @@ files:
62
62
  - ".gitignore"
63
63
  - Gemfile
64
64
  - l-tools.gemspec
65
+ - lib/core/opts.rb
66
+ - lib/core/tool.rb
65
67
  - lib/l-tools.rb
66
68
  - lib/tools/nmap.rb
67
- - lib/tools/tool.rb
68
69
  - lib/tools/tshark.rb
69
70
  - lib/version.rb
70
71
  homepage: https://github.com/l-codes/l-tools