amnesie 0.0.7 → 0.0.8

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: 32a693e395e10dae6902936ee92ccee0f5c88f26dd2c3f35b4af0aaf84d6336d
4
- data.tar.gz: f9f3cc186a25d643add3f3856bbbe41d18bc876cfbad76f0451d6715a9d99359
3
+ metadata.gz: 11732d798fc4f5b255df8da77dce5585e801790ce0c0b4b50f6323495b6055b7
4
+ data.tar.gz: dd548f98938363b93bdcdc77e3e8772dec636832f39668e64aefbbc430c9414e
5
5
  SHA512:
6
- metadata.gz: 87c5a5990c9a64110f2db7ae5346b76be2f1190e85984cc52bb6c28b8cf62051113e8a327ef9d701c221dafc448cdbf0d89c7b77a71ce249117c9bbe4caacb0e
7
- data.tar.gz: 6c095d7d1be44fff68d0527cff8509db7d8a171d74ae5e1fcba75d5610396f4b16215e3c71251cc7b0517a36ea572594fae46170249b4f2527e6008e28d07a19
6
+ metadata.gz: 109de0795c5ae684624a8f2fd86759fe23fdaa1d360e6616e5d565fe7b59fef76d103a06aaca45803acf2a1d3ff763cf9638c8dc9654dba90b5e05c5c08a8277
7
+ data.tar.gz: f7d40849705a4cd1095b5310d69d6cae33152edd502c1270d9d64ba0342a766c362fef499c40688e53913b0cafb5380c243a69452e4c05efd541e16655ffaacd
Binary file
data.tar.gz.sig CHANGED
Binary file
data/.gitignore CHANGED
@@ -1,5 +1,6 @@
1
1
  *.gem
2
2
  *.rbc
3
+ *.swp
3
4
  /.config
4
5
  /coverage/
5
6
  /InstalledFiles
@@ -1,3 +1,8 @@
1
+ ## 0.0.8, release 2020-09-22
2
+ * Enhance code
3
+ * Update the class MAC, more ruby like
4
+ * Use securerandom (>= ruby2.5)
5
+
1
6
  ## 0.0.7, release 2020-05-29
2
7
  * Shortcut action for service (e/d)
3
8
  * Correct permission on amnesie-mac@.service
data/Rakefile CHANGED
@@ -1,5 +1,6 @@
1
1
  # https://github.com/seattlerb/minitest#running-your-tests-
2
2
  require "rake/testtask"
3
+ require File.dirname(__FILE__) + "/lib/amnesie/version"
3
4
 
4
5
  Rake::TestTask.new(:test) do |t|
5
6
  t.libs << "test"
@@ -7,12 +8,13 @@ Rake::TestTask.new(:test) do |t|
7
8
  t.test_files = FileList["test/test_*.rb"]
8
9
  end
9
10
 
11
+ # rake gem:build
10
12
  namespace :gem do
11
13
  desc "build the gem"
12
14
  task :build do
13
15
  Dir["amnesie*.gem"].each {|f| File.unlink(f) }
14
16
  system("gem build amnesie.gemspec")
15
- system("gem install amnesie-0.0.7.gem -P MediumSecurity")
17
+ system("gem install amnesie-#{Amnesie::VERSION}.gem -P MediumSecurity")
16
18
  end
17
19
  end
18
20
 
@@ -1,6 +1,8 @@
1
+ require File.dirname(__FILE__) + "/lib/amnesie/version"
2
+
1
3
  Gem::Specification.new do |s|
2
4
  s.name = "amnesie"
3
- s.version = "0.0.7"
5
+ s.version = Amnesie::VERSION
4
6
  s.summary = "A tool to make your computer amnesic"
5
7
  s.description = <<-EOF
6
8
  A tool to make your computer amnesic"
@@ -1,6 +1,5 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
- require 'amnesie/runner'
3
+ require 'amnesie'
4
4
 
5
- runner = Amnesie::Runner.new(ARGV)
6
- runner.run
5
+ Amnesie::Main.new(ARGV)
@@ -0,0 +1,66 @@
1
+ require_relative 'amnesie/options'
2
+ require_relative 'amnesie/persist'
3
+ require_relative 'amnesie/process'
4
+ require_relative 'amnesie/network'
5
+ require_relative 'amnesie/mac'
6
+ require_relative 'amnesie/helpers'
7
+
8
+ module Amnesie
9
+ def self.random_mac(network)
10
+ mac = Amnesie::MAC.new(network)
11
+ mac.set_addr
12
+ puts "New MAC for " + mac.to_s
13
+ end
14
+
15
+ def self.services(network)
16
+ persist = Amnesie::Persist.new(network)
17
+ if ! persist.mac_exist?
18
+ puts "Create service..."
19
+ persist.services
20
+ elsif persist.mac_exist?
21
+ persist.update_mac
22
+ end
23
+ persist.menu_mac
24
+ puts persist.to_s
25
+ end
26
+
27
+ def self.random_mac_and_kill(network)
28
+ process = Amnesie::Process.new(network)
29
+ mac = Amnesie::MAC.new(network)
30
+
31
+ process.kill
32
+ mac.down
33
+ mac.set_addr
34
+ puts "New MAC for " + mac.to_s
35
+ mac.up
36
+ process.restart
37
+
38
+ end
39
+
40
+ class Main
41
+ def initialize(argv)
42
+ @argv = argv
43
+ run
44
+ end
45
+
46
+ private
47
+
48
+ def run
49
+ options = Options.new(@argv)
50
+ network = options.net_dev ? Network.new(options.net_dev) : Network.new()
51
+
52
+ if options.init
53
+ Amnesie.random_mac(network.card)
54
+ exit
55
+ end
56
+
57
+ if options.persist
58
+ Amnesie.services(network.card)
59
+ end
60
+
61
+ if options.mac
62
+ Amnesie.random_mac_and_kill(network.card)
63
+ end
64
+ end
65
+ end
66
+ end
@@ -1,47 +1,50 @@
1
- require_relative 'helpers'
1
+ require 'securerandom'
2
2
 
3
3
  module Amnesie
4
4
  class MAC
5
5
  def initialize(card)
6
6
  @card = card
7
7
  @ip = Helpers::Exec.new("ip")
8
+ save_origin
9
+ new_mac
8
10
  end
9
11
 
10
- # TODO yep...
11
- def rand
12
- first=`printf ""; dd bs=1 count=1 if=/dev/urandom 2>/dev/null | hexdump -v -e '/1 "%02X"'`
13
- last=`printf ""; dd bs=1 count=5 if=/dev/urandom 2>/dev/null | hexdump -v -e '/1 ":%02X"'`
14
- mac="#{first}#{last}"
15
- lastfive=`echo #{mac} | cut -d: -f 2-6`.chomp
16
- firstbyte=`echo #{mac} | cut -d: -f 1`.chomp
17
- firstbyte=`printf '%02X' $(( 0x#{firstbyte} & 254 | 2))`
18
- @mac="#{firstbyte}:#{lastfive}"
12
+ def set_addr
13
+ @ip.run("link set dev #{@card} address #{@mac}")
14
+ end
15
+
16
+ def down
17
+ @ip.run("link set dev #{@card} down")
18
+ end
19
+
20
+ def up
21
+ @ip.run("link set dev #{@card} up")
19
22
  end
20
23
 
21
24
  def to_s
22
- rand
23
25
  @card + " " + @mac
24
26
  end
25
27
 
26
- def search_curr_mac
27
- @curr = `ip addr show dev #{@card} | grep -i ether | awk '{print $2}'`
28
+ private
29
+
30
+ def new_mac
31
+ first = SecureRandom.hex(1)
32
+ last = SecureRandom.hex(5)
33
+ lastfive = last.split(//).each_slice(2).to_a.map(&:join).join(':')
34
+ firstbyte = `printf '%02X' $(( 0x#{first} & 254 | 2))`
35
+ @mac = "#{firstbyte}:#{lastfive}".downcase
28
36
  end
29
37
 
38
+ def search_curr_mac
39
+ @curr = `ip addr show dev #{@card} | grep -i ether | awk '{print $2}'`.chomp
40
+ end
41
+
30
42
  def save_origin
43
+ return if File.exist? "/tmp/mac_#{@card}"
31
44
  search_curr_mac
32
- txt="/tmp/mac_#{@card}"
33
- if not File.exist?(txt)
34
- file = File.open(txt, 'a+')
35
- file.puts(@curr)
36
- file.close
37
- puts "Origin saved"
38
- end
39
- end
40
-
41
- def apply
42
- @ip.run("link set dev #{@card} down")
43
- @ip.run("link set dev #{@card} address #{@mac}")
44
- @ip.run("link set dev #{@card} up")
45
+ filename="/tmp/mac_#{@card}"
46
+ File.write(filename, @curr)
47
+ puts "Origin saved"
45
48
  end
46
49
  end
47
50
  end
@@ -2,12 +2,14 @@ require 'optparse'
2
2
 
3
3
  module Amnesie
4
4
  class Options
5
- attr_reader :init, :mac, :netcard, :persist
5
+ attr_reader :init, :mac, :net_dev, :persist
6
6
 
7
7
  def initialize(argv)
8
8
  parse(argv)
9
9
  end
10
10
 
11
+ private
12
+
11
13
  def parse(argv)
12
14
  OptionParser.new do |opts|
13
15
 
@@ -15,12 +17,12 @@ module Amnesie
15
17
  @init = true
16
18
  end
17
19
 
18
- opts.on("-m", "--mac", "What is my MAC address?") do
20
+ opts.on("-m", "--mac", "Forge a random MAC address.") do
19
21
  @mac = true
20
22
  end
21
23
 
22
24
  opts.on("-n", "--net-card NAME", "The name of the card to use") do |net|
23
- @netcard = net
25
+ @net_dev = net
24
26
  end
25
27
 
26
28
  opts.on("-p", "--persist", "Enable systemd service") do |net|
@@ -1,11 +1,9 @@
1
1
  require 'fileutils'
2
2
  require 'tempfile'
3
3
  require 'tty-which'
4
- require_relative 'helpers'
5
4
 
6
5
  module Amnesie
7
6
  class Persist
8
-
9
7
  def initialize(card)
10
8
  @card = card
11
9
  @systemd_dir = search_systemd_dir
@@ -1,11 +1,10 @@
1
1
  require 'tty-which'
2
- require_relative 'helpers'
3
2
 
4
3
  module Amnesie
5
4
  class Process
6
5
  def initialize(card)
7
6
  @systemctl = Helpers::Exec.new("systemctl")
8
- @pkill = Helpers::Exec.new("pkill")
7
+ @kill = Helpers::Exec.new("kill")
9
8
  @rm = Helpers::Exec.new("rm")
10
9
  @card = card
11
10
  end
@@ -25,15 +24,16 @@ module Amnesie
25
24
 
26
25
  def kill_dhcpcd
27
26
  return if not TTY::Which.exist?('dhcpcd')
28
- `pgrep -x dhcpcd`
29
- @pkill.run("dhcpcd") if $?.success?
27
+ pids=`pgrep -i dhcpcd`.chomp
28
+ kill_pids(pids) if $?.success?
30
29
  puts "Killed dhcpcd"
31
30
  end
32
31
 
33
32
  def kill_dhclient
34
33
  return if not TTY::Which.exist?('dhclient', paths: ['/sbin'])
35
- `pgrep -x dhclient`
36
- @pkill.run("dhclient") if $?.success?
34
+ pids=`pgrep -i dhclient`.chomp
35
+ kill_pids(pids) if $?.success?
36
+
37
37
  @rm.run("/run/dhclient.#{@card}.pid") if File.exist? "/run/dhclient.#{@card}.pid"
38
38
  @rm.run("/var/lib/dhcp/dhclient.#{@card}.leases") if File.exist? "/var/lib/dhcp/dhclient.#{@card}.leases"
39
39
  puts "Killed dhclient"
@@ -70,5 +70,12 @@ module Amnesie
70
70
  puts "Restarted tor"
71
71
  end
72
72
  end
73
+
74
+ def kill_pids(pids)
75
+ pids.lines.each { |p|
76
+ ps = p.gsub(/\n/, '')
77
+ @kill.run("-9 #{ps}")
78
+ }
79
+ end
73
80
  end
74
81
  end
@@ -0,0 +1,3 @@
1
+ module Amnesie
2
+ VERSION = '0.0.8'.freeze
3
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: amnesie
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.7
4
+ version: 0.0.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - szorfein
@@ -35,7 +35,7 @@ cert_chain:
35
35
  J/zT/q2Ac7BWpSLbv6p9lChBiEnD9j24x463LR5QQjDNS5SsjzRQfFuprsa9Nqf2
36
36
  Tw==
37
37
  -----END CERTIFICATE-----
38
- date: 2020-05-29 00:00:00.000000000 Z
38
+ date: 2020-09-22 00:00:00.000000000 Z
39
39
  dependencies:
40
40
  - !ruby/object:Gem::Dependency
41
41
  name: rake
@@ -132,13 +132,14 @@ files:
132
132
  - Rakefile
133
133
  - amnesie.gemspec
134
134
  - bin/amnesie
135
+ - lib/amnesie.rb
135
136
  - lib/amnesie/helpers.rb
136
137
  - lib/amnesie/mac.rb
137
138
  - lib/amnesie/network.rb
138
139
  - lib/amnesie/options.rb
139
140
  - lib/amnesie/persist.rb
140
141
  - lib/amnesie/process.rb
141
- - lib/amnesie/runner.rb
142
+ - lib/amnesie/version.rb
142
143
  - test/test_mac.rb
143
144
  homepage: https://github.com/szorfein/amnesie
144
145
  licenses:
metadata.gz.sig CHANGED
Binary file
@@ -1,48 +0,0 @@
1
- require_relative 'options'
2
- require_relative 'mac'
3
- require_relative 'process'
4
- require_relative 'network'
5
- require_relative 'persist'
6
-
7
- module Amnesie
8
- class Runner
9
-
10
- def initialize(argv)
11
- @options = Options.new(argv)
12
- @network = false
13
- end
14
-
15
- def run
16
- if @options.mac then
17
- if not @network
18
- @network = Amnesie::Network.new(@options.netcard)
19
- end
20
- puts @network.card
21
- process = Amnesie::Process.new(@network.card)
22
- card = Amnesie::MAC.new(@network.card)
23
-
24
- process.kill unless @options.init
25
- card.save_origin
26
- card.rand
27
- card.apply
28
- puts card.to_s
29
- process.restart unless @options.init
30
- end
31
- if @options.persist then
32
- if not @network
33
- @network = Amnesie::Network.new(@options.netcard)
34
- end
35
- puts @network.card
36
- persist = Amnesie::Persist.new(@network.card)
37
- if ! persist.mac_exist?
38
- puts "Create service..."
39
- persist.services
40
- elsif persist.mac_exist?
41
- persist.update_mac
42
- end
43
- persist.menu_mac
44
- puts persist.to_s
45
- end
46
- end
47
- end
48
- end