penkit 0.0.1.rc2 → 0.0.1

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
  SHA1:
3
- metadata.gz: 1f4a19d70fab6445e950cf902d1521ec8a45ccdb
4
- data.tar.gz: a445066995b1e562e06f7901fc3965369017569c
3
+ metadata.gz: d70da81abc9263879c5ee641dcc24d19bf7d4fea
4
+ data.tar.gz: 238e150cd6ff9bb69cdaa3b0276cf09ca38c5cdf
5
5
  SHA512:
6
- metadata.gz: d9e52c147e9abec5a100613f2c1e1d472736fefb1a585ba37b2f2c050ed69689463cc002ab59bc6705102b31465c6a78c3eeef31b5c30688b22056084811eab4
7
- data.tar.gz: d7de7a08b54d0ada8b5d8c7ff06200688c2ca337a7e0da2c63b164886b57c1df0616c660ad9f84ab8b35be32f573a1133ef42037743eded6681534142e3683f3
6
+ metadata.gz: 438fdc93bad785f612d4e781f635be78d9296b11fcd8bd03517b4b5429af9e5879aae33f504d1a2e66b831d48f45ac167ef68b3fcc3b25bc4d5bcbb6f195841e
7
+ data.tar.gz: 9d565f1cfbf336705b4ac8762b4c16a29c04c81d0e1762620e6e5b35079f70a24ae9d06870385876f526b2df6c76ac0a28fd13e620c39f03c316d35323000cb4
data/lib/penkit.rb CHANGED
@@ -1,4 +1,5 @@
1
1
  require "penkit/cli"
2
2
  require "penkit/docker"
3
3
  require "penkit/docker_compose"
4
+ require "penkit/helpers"
4
5
  require "penkit/version"
@@ -0,0 +1,8 @@
1
+ module Penkit
2
+ class CLI < Thor
3
+ desc "ps", "List penkit docker containers"
4
+ def ps
5
+ docker.ps
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,26 @@
1
+ module Penkit
2
+ class CLI < Thor
3
+ desc "rm [CONTAINER...]", "Remove penkit docker containers"
4
+ def rm(*containers)
5
+ if containers.any?
6
+ docker.rm(*containers)
7
+ else
8
+ rm_all
9
+ end
10
+ end
11
+
12
+ private
13
+
14
+ def rm_all
15
+ containers = docker.find_all_containers
16
+ docker.rm(*containers) if rm_all?(containers)
17
+ end
18
+
19
+ def rm_all?(containers)
20
+ return false if containers.size == 0
21
+ message = "Are you sure you want to remove %d %s? [y/N]"
22
+ word = containers.size > 1 ? "containers" : "container"
23
+ ask(message % [containers.size, word]) == "y"
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,15 @@
1
+ module Penkit
2
+ class CLI < Thor
3
+ desc "start [OPTIONS] IMAGE", "Start a penkit docker image"
4
+ option :name, desc: "Override name and hostname of container"
5
+ def start(image)
6
+ if has_config?(image)
7
+ opts = options.dup
8
+ opts[:name] ||= unique_name(image)
9
+ docker_compose.up(image, opts)
10
+ else
11
+ docker.start(image, options.dup)
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,26 @@
1
+ module Penkit
2
+ class CLI < Thor
3
+ desc "stop [CONTAINER...]", "Stop penkit docker containers"
4
+ def stop(*containers)
5
+ if containers.any?
6
+ docker.stop(*containers)
7
+ else
8
+ stop_all
9
+ end
10
+ end
11
+
12
+ private
13
+
14
+ def stop_all
15
+ containers = docker.find_running_containers
16
+ docker.stop(*containers) if stop_all?(containers)
17
+ end
18
+
19
+ def stop_all?(containers)
20
+ return false if containers.size == 0
21
+ message = "Are you sure you want to stop %d %s? [y/N]"
22
+ word = containers.size > 1 ? "containers" : "container"
23
+ ask(message % [containers.size, word]) == "y"
24
+ end
25
+ end
26
+ end
@@ -1,96 +1,18 @@
1
1
  require "thor"
2
+ require "penkit/helpers"
3
+ require "penkit/cli/container/ps"
4
+ require "penkit/cli/container/rm"
5
+ require "penkit/cli/container/start"
6
+ require "penkit/cli/container/stop"
7
+ require "penkit/cli/tools"
2
8
 
3
9
  module Penkit
4
10
  class CLI < Thor
5
- desc "ps", "List penkit docker containers"
6
- def ps
7
- docker.ps
8
- end
9
-
10
- desc "rm [CONTAINER...]", "Remove penkit docker containers"
11
- def rm(*containers)
12
- if containers.any?
13
- docker.rm(*containers)
14
- else
15
- rm_all
16
- end
17
- end
18
-
19
- desc "start [OPTIONS] IMAGE", "Start a penkit docker image"
20
- option :name, desc: "Override name and hostname of container"
21
- def start(image)
22
- if docker_compose.has_config?(image)
23
- opts = options.dup
24
- opts[:name] ||= docker.unique_name(image)
25
- docker_compose.up(image, opts)
26
- else
27
- docker.start(image, options.dup)
28
- end
29
- end
30
-
31
- desc "stop [CONTAINER...]", "Stop penkit docker containers"
32
- def stop(*containers)
33
- if containers.any?
34
- docker.stop(*containers)
35
- else
36
- stop_all
37
- end
38
- end
39
-
40
- # Tools
41
-
42
- desc "curl [ARGS...]", "Run curl on the penkit docker network"
43
- def curl(*args)
44
- docker.run("cli:curl", *args)
45
- end
46
-
47
- desc "metasploit [ARGS...]", "Run metasploit on the penkit docker network"
48
- def metasploit(*args)
49
- docker.run("cli:metasploit", *args)
50
- end
51
-
52
- desc "sqlmap [ARGS...]", "Run sqlmap on the penkit docker network"
53
- def sqlmap(*args)
54
- docker.run("cli:sqlmap", *args)
55
- end
56
-
57
- desc "wpscan [ARGS...]", "Run wpscan on the penkit docker network"
58
- def wpscan(*args)
59
- docker.run("cli:wpscan", *args)
60
- end
61
-
62
- private
63
-
64
- def docker
65
- @docker ||= Penkit::Docker.new
66
- end
67
-
68
- def docker_compose
69
- @docker_compose ||= Penkit::DockerCompose.new
70
- end
71
-
72
- def stop_all
73
- containers = docker.find_running_containers
74
- docker.stop(*containers) if stop_all?(containers)
75
- end
76
-
77
- def stop_all?(containers)
78
- return false if containers.size == 0
79
- message = "Are you sure you want to stop %d %s? [y/N]"
80
- word = containers.size > 1 ? "containers" : "container"
81
- ask(message % [containers.size, word]) == "y"
82
- end
83
-
84
- def rm_all
85
- containers = docker.find_all_containers
86
- docker.rm(*containers) if rm_all?(containers)
87
- end
11
+ include Penkit::Helpers
88
12
 
89
- def rm_all?(containers)
90
- return false if containers.size == 0
91
- message = "Are you sure you want to remove %d %s? [y/N]"
92
- word = containers.size > 1 ? "containers" : "container"
93
- ask(message % [containers.size, word]) == "y"
13
+ desc "version", "Show current version"
14
+ def version
15
+ puts VERSION
94
16
  end
95
17
  end
96
18
  end
@@ -0,0 +1,65 @@
1
+ require "thor"
2
+
3
+ module Penkit
4
+ class CLI < Thor
5
+ desc "curl [ARGS...]", "Run curl on the penkit docker network"
6
+ def curl(*args)
7
+ docker.run("cli:net", "curl", *args)
8
+ end
9
+
10
+ desc "ftp [ARGS...]", "Run ftp on the penkit docker network"
11
+ def ftp(*args)
12
+ docker.run("cli:net", "lftp", *args)
13
+ end
14
+
15
+ desc "metasploit [ARGS...]", "Run metasploit on the penkit docker network"
16
+ def metasploit(*args)
17
+ docker.run("cli:metasploit", *args)
18
+ end
19
+
20
+ desc "netcat [ARGS...]", "Run netcat on the penkit docker network"
21
+ def netcat(*args)
22
+ docker.run("cli:net", "nc", *args)
23
+ end
24
+
25
+ desc "nmap [ARGS...]", "Run nmap on the penkit docker network"
26
+ def nmap(*args)
27
+ docker.run("cli:net", "nmap", *args)
28
+ end
29
+
30
+ desc "ping [ARGS...]", "Run ping on the penkit docker network"
31
+ def ping(*args)
32
+ docker.run("cli:net", "ping", *args)
33
+ end
34
+
35
+ desc "rpcinfo [ARGS...]", "Run rcpinfo on the penkit docker network"
36
+ def rpcinfo(*args)
37
+ docker.run("cli:net", "rpcinfo", *args)
38
+ end
39
+
40
+ desc "showmount [ARGS...]", "Run showmount on the penkit docker network"
41
+ def showmount(*args)
42
+ docker.run("cli:net", "showmount", *args)
43
+ end
44
+
45
+ desc "smbclient [ARGS...]", "Run smbclient on the penkit docker network"
46
+ def smbclient(*args)
47
+ docker.run("cli:net", "smbclient", *args)
48
+ end
49
+
50
+ desc "sqlmap [ARGS...]", "Run sqlmap on the penkit docker network"
51
+ def sqlmap(*args)
52
+ docker.run("cli:sqlmap", *args)
53
+ end
54
+
55
+ desc "wget [ARGS...]", "Run wget on the penkit docker network"
56
+ def wget(*args)
57
+ docker.run("cli:net", "wget", *args)
58
+ end
59
+
60
+ desc "wpscan [ARGS...]", "Run wpscan on the penkit docker network"
61
+ def wpscan(*args)
62
+ docker.run("cli:wpscan", *args)
63
+ end
64
+ end
65
+ end
data/lib/penkit/docker.rb CHANGED
@@ -1,85 +1,16 @@
1
+ require "penkit/helpers"
2
+ require "penkit/docker/network"
3
+ require "penkit/docker/ps"
4
+ require "penkit/docker/rm"
5
+ require "penkit/docker/start"
6
+ require "penkit/docker/stop"
7
+
1
8
  module Penkit
2
9
  class Docker
10
+ include Penkit::Helpers
11
+
3
12
  IMAGE_REGEX = /^([^\s\/:]+)(:[^\s\/:]+)?$/
4
13
  NETWORK = "penkit".freeze
5
14
  REPOSITORY = "penkit".freeze
6
-
7
- def create_network!
8
- system("docker", "network", "create", *network_options, out: File::NULL) unless network_exists?
9
- end
10
-
11
- def find_all_containers
12
- IO.popen(["docker", "ps", "-aq", *filter_options]).readlines.map(&:strip)
13
- end
14
-
15
- def find_running_containers
16
- IO.popen(["docker", "ps", "-q", *filter_options]).readlines.map(&:strip)
17
- end
18
-
19
- def image_name(image)
20
- image[IMAGE_REGEX, 1]
21
- end
22
-
23
- def image_url(image)
24
- "#{REPOSITORY}/#{image}"
25
- end
26
-
27
- def ps
28
- exec("docker", "ps", *filter_options)
29
- end
30
-
31
- def rm(*containers)
32
- exec("docker", "rm", "--force", *containers)
33
- end
34
-
35
- def run(image, *args)
36
- create_network!
37
- exec("docker", "run", "--rm", "-it", *run_options, image_url(image), *args)
38
- end
39
-
40
- def start(image, options={})
41
- create_network!
42
- options[:name] ||= unique_name(image)
43
- puts "Starting container #{options[:name]}"
44
- exec("docker", "run", "--detach", *run_options(options), image_url(image))
45
- end
46
-
47
- def stop(*containers)
48
- exec("docker", "stop", *containers)
49
- end
50
-
51
- def unique_name(name)
52
- name = image_name(name)
53
- name_list = find_container_names
54
- 100.times do |i|
55
- return name unless name_list.include? name
56
- name = [name[/^(.*\D)\d*$/, 1], i + 1].join
57
- end
58
- name
59
- end
60
-
61
- private
62
-
63
- def find_container_names
64
- IO.popen(["docker", "ps", "-a", "--format", "{{.Names}}", *filter_options]).readlines.map(&:strip)
65
- end
66
-
67
- def network_exists?
68
- system("docker", "network", "inspect", NETWORK, out: File::NULL, err: File::NULL)
69
- end
70
-
71
- def network_options
72
- %w(--driver bridge) << NETWORK
73
- end
74
-
75
- def filter_options
76
- %w(--filter label=penkit)
77
- end
78
-
79
- def run_options(options={})
80
- args = %w(--label penkit=true --network penkit)
81
- args += ["--name", options[:name], "--hostname", options[:name]] if options[:name]
82
- args
83
- end
84
15
  end
85
16
  end
@@ -0,0 +1,17 @@
1
+ module Penkit
2
+ class Docker
3
+ def create_network!
4
+ system("docker", "network", "create", *network_options, out: File::NULL) unless network_exists?
5
+ end
6
+
7
+ private
8
+
9
+ def network_exists?
10
+ system("docker", "network", "inspect", NETWORK, out: File::NULL, err: File::NULL)
11
+ end
12
+
13
+ def network_options
14
+ %w(--driver bridge) << NETWORK
15
+ end
16
+ end
17
+ end
@@ -0,0 +1,25 @@
1
+ module Penkit
2
+ class Docker
3
+ def find_all_containers
4
+ IO.popen(["docker", "ps", "-aq", *filter_options]).readlines.map(&:strip)
5
+ end
6
+
7
+ def find_container_names
8
+ IO.popen(["docker", "ps", "-a", "--format", "{{.Names}}", *filter_options]).readlines.map(&:strip)
9
+ end
10
+
11
+ def find_running_containers
12
+ IO.popen(["docker", "ps", "-q", *filter_options]).readlines.map(&:strip)
13
+ end
14
+
15
+ def ps
16
+ exec("docker", "ps", *filter_options)
17
+ end
18
+
19
+ private
20
+
21
+ def filter_options
22
+ %w(--filter label=penkit)
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,7 @@
1
+ module Penkit
2
+ class Docker
3
+ def rm(*containers)
4
+ exec("docker", "rm", "--force", *containers)
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,23 @@
1
+ module Penkit
2
+ class Docker
3
+ def run(image, *args)
4
+ create_network!
5
+ exec("docker", "run", "--rm", "-it", *run_options, image_url(image), *args)
6
+ end
7
+
8
+ def start(image, options={})
9
+ create_network!
10
+ options[:name] ||= unique_name(image)
11
+ puts "Starting container #{options[:name]}"
12
+ exec("docker", "run", "--detach", *run_options(options), image_url(image))
13
+ end
14
+
15
+ private
16
+
17
+ def run_options(options={})
18
+ args = %w(--label penkit=true --network penkit)
19
+ args += ["--name", options[:name], "--hostname", options[:name]] if options[:name]
20
+ args
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,7 @@
1
+ module Penkit
2
+ class Docker
3
+ def stop(*containers)
4
+ exec("docker", "stop", *containers)
5
+ end
6
+ end
7
+ end
@@ -1,8 +1,8 @@
1
+ require "penkit/helpers"
2
+
1
3
  module Penkit
2
4
  class DockerCompose
3
- def has_config?(image)
4
- File.exist?(config_file(image))
5
- end
5
+ include Penkit::Helpers
6
6
 
7
7
  def up(image, options = {})
8
8
  docker.create_network!
@@ -16,7 +16,7 @@ module Penkit
16
16
 
17
17
  def compose_env(image, options={})
18
18
  {
19
- "DOCKER_IMAGE" => docker.image_url(image),
19
+ "DOCKER_IMAGE" => image_url(image),
20
20
  "DOCKER_NAME" => options[:name]
21
21
  }
22
22
  end
@@ -24,14 +24,5 @@ module Penkit
24
24
  def compose_options(image, options={})
25
25
  ["-f", config_file(image), "-p", options[:name]]
26
26
  end
27
-
28
- def config_file(image)
29
- root = File.expand_path("../../..", __FILE__)
30
- File.join(root, "config", "#{docker.image_name(image)}.yml")
31
- end
32
-
33
- def docker
34
- @docker ||= Penkit::Docker.new
35
- end
36
27
  end
37
28
  end
@@ -0,0 +1,40 @@
1
+ module Penkit
2
+ module Helpers
3
+ private
4
+
5
+ def config_file(image)
6
+ root = File.expand_path("../../..", __FILE__)
7
+ File.join(root, "config", "#{image_name(image)}.yml")
8
+ end
9
+
10
+ def docker
11
+ @docker ||= Penkit::Docker.new
12
+ end
13
+
14
+ def docker_compose
15
+ @docker_compose ||= Penkit::DockerCompose.new
16
+ end
17
+
18
+ def has_config?(image)
19
+ File.exist?(config_file(image))
20
+ end
21
+
22
+ def image_name(image)
23
+ image[Penkit::Docker::IMAGE_REGEX, 1]
24
+ end
25
+
26
+ def image_url(image)
27
+ "#{Penkit::Docker::REPOSITORY}/#{image}"
28
+ end
29
+
30
+ def unique_name(name)
31
+ name = image_name(name)
32
+ name_list = docker.find_container_names
33
+ 99.times do |i|
34
+ return name unless name_list.include? name
35
+ name = [name[/^(.*\D)\d*$/, 1], i + 1].join
36
+ end
37
+ name
38
+ end
39
+ end
40
+ end
@@ -1,3 +1,3 @@
1
1
  module Penkit
2
- VERSION = "0.0.1.rc2"
2
+ VERSION = "0.0.1"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: penkit
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1.rc2
4
+ version: 0.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Don Humphreys
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2017-03-12 00:00:00.000000000 Z
12
+ date: 2017-03-18 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: thor
@@ -25,6 +25,20 @@ dependencies:
25
25
  - - "~>"
26
26
  - !ruby/object:Gem::Version
27
27
  version: 0.19.4
28
+ - !ruby/object:Gem::Dependency
29
+ name: bundler
30
+ requirement: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - "~>"
33
+ - !ruby/object:Gem::Version
34
+ version: '1.0'
35
+ type: :development
36
+ prerelease: false
37
+ version_requirements: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - "~>"
40
+ - !ruby/object:Gem::Version
41
+ version: '1.0'
28
42
  - !ruby/object:Gem::Dependency
29
43
  name: rspec
30
44
  requirement: !ruby/object:Gem::Requirement
@@ -54,9 +68,20 @@ files:
54
68
  - config/wordpress.yml
55
69
  - lib/penkit.rb
56
70
  - lib/penkit/cli.rb
71
+ - lib/penkit/cli/container/ps.rb
72
+ - lib/penkit/cli/container/rm.rb
73
+ - lib/penkit/cli/container/start.rb
74
+ - lib/penkit/cli/container/stop.rb
57
75
  - lib/penkit/cli/penkit.rb
76
+ - lib/penkit/cli/tools.rb
58
77
  - lib/penkit/docker.rb
78
+ - lib/penkit/docker/network.rb
79
+ - lib/penkit/docker/ps.rb
80
+ - lib/penkit/docker/rm.rb
81
+ - lib/penkit/docker/start.rb
82
+ - lib/penkit/docker/stop.rb
59
83
  - lib/penkit/docker_compose.rb
84
+ - lib/penkit/helpers.rb
60
85
  - lib/penkit/version.rb
61
86
  homepage: http://penkit.io
62
87
  licenses:
@@ -70,12 +95,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
70
95
  requirements:
71
96
  - - ">="
72
97
  - !ruby/object:Gem::Version
73
- version: '0'
98
+ version: 1.9.0
74
99
  required_rubygems_version: !ruby/object:Gem::Requirement
75
100
  requirements:
76
- - - ">"
101
+ - - ">="
77
102
  - !ruby/object:Gem::Version
78
- version: 1.3.1
103
+ version: 1.3.5
79
104
  requirements: []
80
105
  rubyforge_project:
81
106
  rubygems_version: 2.5.2