tor_extend 1.0.2 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -103,4 +103,8 @@ ATTACK_TOUR = {:lat => 46.0,
103
103
 
104
104
  # This determines how long the program Tor::TController.extendcir_slowly() waits between each extension.
105
105
  EXTEND_DELAY = 2.0
106
+
107
+ # This determines how frequent the circuits that make up long circuits will be checked and reattached.
108
+ PERIODIC_TIMER = 7
109
+
106
110
  end
@@ -33,6 +33,27 @@ require 'socksify/http'
33
33
  #
34
34
  class TController < Tor::Controller
35
35
 
36
+ ##
37
+ # @param [Hash{Symbol => Object}] options
38
+ # @option options [String, #to_s] :host ("127.0.0.1")
39
+ # @option options [Integer, #to_i] :port (9051)
40
+ # @option options [String, #to_s] :cookie (nil)
41
+ # @option options [Integer, #to_i] :version (PROTOCOL_VERSION)
42
+ def initialize(options = {}, &block)
43
+ @options = options.dup
44
+ @host = (@options.delete(:host) || '127.0.0.1').to_s
45
+ @port = (@options.delete(:port) || 9051).to_i
46
+ @version = (@options.delete(:version) || PROTOCOL_VERSION).to_i
47
+ @passwd = (@options.delete(:password) || '').to_s
48
+ connect
49
+ authenticate "\"#{@passwd}\"" if ! @passwd != ""
50
+ if block_given?
51
+ block.call(self)
52
+ quit
53
+ end
54
+ end
55
+
56
+
36
57
  # This returns the circuit-status in an array, or an empty array on failure
37
58
  #
38
59
  # <b>Get the circuit-status from Tor</b>.
@@ -159,13 +180,12 @@ require 'socksify/http'
159
180
  # The return format is fo the form:
160
181
  # [HTTPcode, [{:bridgeip, :bridgeport},{:bridgeip, :bridgeport},{:bridgeip, :bridgeport}].
161
182
  # The types can be one of 'tor', 'polipo', 'socks', 'http', 'https',nil, 'none'.
162
- # torctrl_cirnum must have the form:
163
- # torctrl_cirnum ={:torctrl=>Tor::TController, :cirnum=>cirnum,:hop=>hopcount}
164
183
  #
165
184
  # <b>Get 3 bridges</b>
166
185
  #
167
186
  # Tor::TController.get_bridges( {:proxytype=>'tor',:proxyport=>9050,:proxyaddr=>'127.0.0.1'} )
168
- def get_bridges(url, cacheddesc, *config)
187
+ def get_bridges(cacheddesc, *config)
188
+ url = URI.parse "https://bridges.torproject.org/"
169
189
  if config.empty?
170
190
  proxyconfig={:type=>'tor' ,:port=>9050,:addr=>'127.0.0.1'}
171
191
  else
@@ -202,7 +222,7 @@ require 'socksify/http'
202
222
  bridgeip,bridgeport= eachbridge.split(':')
203
223
  x=Bridge.where(:ipaddr=>bridgeip, :port =>bridgeport)
204
224
  if x.empty?
205
- if (bridge_geoip=cacheddesc.get_geoiprecord(bridgeip)).nil?
225
+ if cacheddesc.nil? or (bridge_geoip=cacheddesc.get_geoiprecord(bridgeip)).nil?
206
226
  Bridge.create(:ipaddr=>bridgeip, :port =>bridgeport,
207
227
  :lat=>0, :lng=>0)
208
228
  else
@@ -219,7 +239,7 @@ require 'socksify/http'
219
239
  respcode=nil
220
240
  bridges=[]
221
241
  end
222
- bridges #Return array of all bridges
242
+ bridges.nil? ? [] : bridges #Return array of all bridges
223
243
  end
224
244
 
225
245
  # Returns all the brdiges in the database as an array.
@@ -236,19 +256,19 @@ require 'socksify/http'
236
256
  case eachstream
237
257
  when /\d+ NEW 0/
238
258
  # It might be simpler to use this /\d+ NEW/
239
- reply << eachstream.scan(/\d+/)[0]
259
+ reply << eachstream.scan(/\d+/)[0].to_i
240
260
  end
241
261
  }
242
262
  reply
243
263
  end
244
264
 
245
265
  # This attaches streams to circuits. No documentation yet.
246
- def attach_stream(stream_no, cir_num ,hop_count)
247
- puts "attachstream"
248
- if hop_count==0
266
+ def attach_stream(stream_no, cir_num ,*hop_count)
267
+ # puts "attachstream #{cir_num}\n"
268
+ if hop_count.empty? or hop_count[0] == 0
249
269
  sr(:attachstream,"#{stream_no} #{cir_num}")
250
270
  else
251
- sr(:attachstream,"#{stream_no} #{cir_num} HOP=#{hop_count}")
271
+ sr(:attachstream,"#{stream_no} #{cir_num} HOP=#{hop_count[0]}")
252
272
  end
253
273
  end
254
274
 
@@ -12,12 +12,16 @@ module Tor
12
12
  require 'builder'
13
13
  require 'geoip'
14
14
  require 'net/https'
15
+ require 'tmpdir' # used to store temporary directories for tor and polipo config
16
+ # require 'open3' # required for launching multiple occurences of tor and polipo for spinning within the Tor circuit
17
+ require 'eventmachine'
15
18
 
16
19
  # Tor::Constants module is loaded from constants.rb and other classes from seperate files
17
20
  autoload :Constants, 'constants'
18
21
  require 'tcontroller'
19
22
  require 'tstats'
20
23
  require 'httpmod'
24
+ require 'circuits'
21
25
 
22
26
  # Tor::Router is a class for the active record database holding the ip-addresses, platform, fingerprint, country, latitude,longitude.
23
27
  #
@@ -2,7 +2,7 @@
2
2
  require 'rubygems'
3
3
  spec = Gem::Specification.new do |s|
4
4
  s.name = "tor_extend"
5
- s.version = "1.0.2"
5
+ s.version = "2.0.0"
6
6
  s.summary = "TController inherits the features from the Controller class in Arto Bendiken\'s tor-ruby [https://github.com/bendiken/tor-ruby] and extends it to do so much more"
7
7
  s.files = Dir.glob("**/**/**")
8
8
  s.test_files = Dir.glob("test/*_test.rb")
@@ -16,11 +16,24 @@ spec = Gem::Specification.new do |s|
16
16
  s.add_dependency('tor', '>= 0.1.2')
17
17
  s.add_dependency('geoip', '>= 1.1.1')
18
18
  s.add_dependency('socksify', '>= 1.4.1')
19
+ s.add_dependency('eventmachine', '>= 0.12.10')
20
+
21
+ s.requirements << ' ruby'
22
+ s.requirements << ' socksify'
23
+ s.requirements << ' tor'
24
+ s.requirements << ' eventmachine'
25
+
19
26
  s.description = <<-EOF
20
- TController is an extension of the open source Tor::Controller library written for ruby by Bendiken
21
- dependencies are specified in standard Ruby syntax. It adds several functionalities that were not already included in the original library, and this is still a work in progress.
27
+ This library extends Bendiken's tor-ruby [https://github.com/bendiken/tor-ruby], and provides methods for working with circuits, packet spinning, as well as obtaining Bridges from the Tor anonymous network as described at the following conference:
28
+ PacSec Applied Security Conference, Tokyo, Japan on, 9-10 Nov. 2011, "Filiol E., Remi-Omosowon O. B., Mutembei L., 2011. Dynamic cryptographic trapdoors to take over the TOR network".
29
+ H2HC 2011, Sao Paulo, Brazil on, 29-30 Oct. 2011, "Filiol E., Remi-Omosowon O. B., Mutembei L., 2011. How to take over the Tor network operationally "
30
+
31
+ It will be updated before and after the talk at:
32
+ 28C3, Chaos Communication Congress Conference, Berlin, Germany on, 27-30 Dec. 2011, "Filiol E., Remi-Omosowon O. B., Mutembei L., 2011. Dynamic cryptographic trapdoors to take over the TOR network.
33
+
34
+ It requires the geoip, socksify and tor gems, which I included in the specification file to auto install for clients. So other licences may apply.
35
+ Also available at http://cvo-lab.blogspot.com/2011/11/tor-attack-technical-details.html
22
36
  EOF
23
- s.homepage = ("http://cvo-lab.blogspot.com")
24
37
  s.homepage = ("http://tor-extend.rubyforge.org")
25
38
  s.rubyforge_project = 'tor_extend'
26
39
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: tor_extend
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.2
4
+ version: 2.0.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2011-11-16 00:00:00.000000000Z
12
+ date: 2011-12-22 00:00:00.000000000Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: tor
16
- requirement: &72847450 !ruby/object:Gem::Requirement
16
+ requirement: &83061440 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: 0.1.2
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *72847450
24
+ version_requirements: *83061440
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: geoip
27
- requirement: &72847010 !ruby/object:Gem::Requirement
27
+ requirement: &83061210 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,10 +32,10 @@ dependencies:
32
32
  version: 1.1.1
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *72847010
35
+ version_requirements: *83061210
36
36
  - !ruby/object:Gem::Dependency
37
37
  name: socksify
38
- requirement: &72846180 !ruby/object:Gem::Requirement
38
+ requirement: &83060980 !ruby/object:Gem::Requirement
39
39
  none: false
40
40
  requirements:
41
41
  - - ! '>='
@@ -43,11 +43,31 @@ dependencies:
43
43
  version: 1.4.1
44
44
  type: :runtime
45
45
  prerelease: false
46
- version_requirements: *72846180
47
- description: ! " TController is an extension of the open source Tor::Controller
48
- library written for ruby by Bendiken\n dependencies are specified in standard
49
- Ruby syntax. It adds several functionalities that were not already included in the
50
- original library, and this is still a work in progress.\n"
46
+ version_requirements: *83060980
47
+ - !ruby/object:Gem::Dependency
48
+ name: eventmachine
49
+ requirement: &83060750 !ruby/object:Gem::Requirement
50
+ none: false
51
+ requirements:
52
+ - - ! '>='
53
+ - !ruby/object:Gem::Version
54
+ version: 0.12.10
55
+ type: :runtime
56
+ prerelease: false
57
+ version_requirements: *83060750
58
+ description: ! " This library extends Bendiken's tor-ruby [https://github.com/bendiken/tor-ruby],
59
+ and provides methods for working with circuits, packet spinning, as well as obtaining
60
+ Bridges from the Tor anonymous network as described at the following conference:\n
61
+ \ PacSec Applied Security Conference, Tokyo, Japan on, 9-10 Nov. 2011, \"Filiol
62
+ E., Remi-Omosowon O. B., Mutembei L., 2011. Dynamic cryptographic trapdoors to take
63
+ over the TOR network\".\n H2HC 2011, Sao Paulo, Brazil on, 29-30 Oct. 2011, \"Filiol
64
+ E., Remi-Omosowon O. B., Mutembei L., 2011. How to take over the Tor network operationally
65
+ \"\n\n It will be updated before and after the talk at: \n 28C3, Chaos Communication
66
+ Congress Conference, Berlin, Germany on, 27-30 Dec. 2011, \"Filiol E., Remi-Omosowon
67
+ O. B., Mutembei L., 2011. Dynamic cryptographic trapdoors to take over the TOR network.\n\n
68
+ \ It requires the geoip, socksify and tor gems, which I included in the specification
69
+ file to auto install for clients. So other licences may apply.\n Also available
70
+ at http://cvo-lab.blogspot.com/2011/11/tor-attack-technical-details.html\n"
51
71
  email: remi-omosowon@et.esiea-ouest.fr
52
72
  executables: []
53
73
  extensions: []
@@ -93,12 +113,15 @@ files:
93
113
  - doc/js/jquery.js
94
114
  - doc/js/search.js
95
115
  - doc/Tor/Constants.html
116
+ - doc/Tor/Circuit.html
117
+ - doc/Tor/LongCircuit.html
96
118
  - doc/Tor/StatsObj.html
97
119
  - doc/Tor/Bridge.html
98
120
  - doc/Tor/Router.html
99
121
  - doc/Tor/TController.html
100
122
  - doc/Tor/CachedDesc.html
101
123
  - doc/lib/constants_rb.html
124
+ - doc/lib/circuits_rb.html
102
125
  - doc/lib/tor_extend_rb.html
103
126
  - doc/lib/tcontroller_rb.html
104
127
  - doc/lib/tstats_rb.html
@@ -107,6 +130,7 @@ files:
107
130
  - lib/httpmod.rb
108
131
  - lib/tor_extend.rb
109
132
  - lib/tstats.rb
133
+ - lib/circuits.rb
110
134
  - lib/tcontroller.rb
111
135
  - lib/constants.rb
112
136
  - tor_extend.gemspec
@@ -128,9 +152,13 @@ required_rubygems_version: !ruby/object:Gem::Requirement
128
152
  - - ! '>='
129
153
  - !ruby/object:Gem::Version
130
154
  version: '0'
131
- requirements: []
155
+ requirements:
156
+ - ! ' ruby'
157
+ - ! ' socksify'
158
+ - ! ' tor'
159
+ - ! ' eventmachine'
132
160
  rubyforge_project: tor_extend
133
- rubygems_version: 1.8.11
161
+ rubygems_version: 1.8.12
134
162
  signing_key:
135
163
  specification_version: 3
136
164
  summary: TController inherits the features from the Controller class in Arto Bendiken's