dcase 0.2 → 0.3
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 +4 -4
- data/README.md +7 -4
- data/Rakefile +3 -2
- data/config.yml +3 -0
- data/lib/dcase/cli.rb +2 -2
- data/lib/dcase/config.rb +8 -3
- data/lib/dcase/local.rb +1 -0
- data/lib/dcase/server.rb +6 -3
- data/lib/dcase/version.rb +1 -1
- data/test/dcase/cli_test.rb +5 -0
- data/test/dcase/config_test.rb +42 -0
- data/test/test_helper.rb +5 -0
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1fec588b807e7fbd5220c48f3f742dcbe9bddaa5
|
4
|
+
data.tar.gz: 4d34376f2ff60eb1e2340b11e9f3d7b1790d0e41
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 20eabd04c3ef770cb5f15668a60812efdaf55f3f2bbb311ad4ecfe577497f024eb7ff0c9dcae805ef0731f654d0d726623c8ff79c4f9d3cc449f172795021a86
|
7
|
+
data.tar.gz: 7e1cd1a5eb774599e69be9c588b4577d63e3fc1616d8bb528fef8a13226c61c2ee0de344b58280b07a30f1bd5eda579e6a0694af602442f12774ceb2a375c709
|
data/README.md
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
DCase
|
2
2
|
=====
|
3
3
|
|
4
|
-
Current version: 0.
|
4
|
+
Current version: 0.3
|
5
5
|
|
6
6
|
DCase is a lightweight dns proxy which can help you get through firewalls.
|
7
7
|
|
@@ -22,8 +22,10 @@ Create a file named `config.yml`, with the following content.
|
|
22
22
|
side: 'local or server'
|
23
23
|
password: 'your password'
|
24
24
|
port: '8440'
|
25
|
-
# you don't need this line when it's on server side
|
26
25
|
server: 'remote server address'
|
26
|
+
dns_list:
|
27
|
+
- '8.8.8.8'
|
28
|
+
- '8.8.4.4'
|
27
29
|
|
28
30
|
Explanation of the fields:
|
29
31
|
|
@@ -31,7 +33,8 @@ Explanation of the fields:
|
|
31
33
|
server Remote server address
|
32
34
|
port Remote server port
|
33
35
|
password Password, should be same in client and server sides
|
34
|
-
|
36
|
+
dns_list A dns server will pick on server side
|
37
|
+
|
35
38
|
`cd` into the directory of `config.yml`. Run `dcase` on your server. To run it in the background, run
|
36
39
|
`nohup dcase -c ./config.yml > log &`.
|
37
40
|
|
@@ -43,7 +46,7 @@ Command line args
|
|
43
46
|
You can use args to override settings from `config.json`.
|
44
47
|
|
45
48
|
sudo dcase -s local -r remote_server_ip_address -p remote_server_port -k your_password
|
46
|
-
sudo dcase -s server -p remote_server_port -k your_password
|
49
|
+
sudo dcase -s server -p remote_server_port -k your_password -l 8.8.8.8,8.8.4.4
|
47
50
|
|
48
51
|
License
|
49
52
|
-------
|
data/Rakefile
CHANGED
@@ -5,8 +5,9 @@ require 'rake/testtask'
|
|
5
5
|
# Load custom tasks
|
6
6
|
Dir['tasks/*.rake'].sort.each { |f| load f }
|
7
7
|
|
8
|
-
Rake::TestTask.new do |
|
9
|
-
|
8
|
+
Rake::TestTask.new do |t|
|
9
|
+
t.libs << 'test'
|
10
|
+
t.pattern = "test/**/*_test.rb"
|
10
11
|
end
|
11
12
|
|
12
13
|
task :default => :test
|
data/config.yml
CHANGED
data/lib/dcase/cli.rb
CHANGED
@@ -12,8 +12,8 @@ module DCase
|
|
12
12
|
puts "*** Local side is up, remote server port:#{@config.port}"
|
13
13
|
DCase::Local.supervise('0.0.0.0', 53, @crypto, @config)
|
14
14
|
when 'server'
|
15
|
-
puts "*** Server side is up, port:#{@config.port}"
|
16
|
-
DCase::Server.supervise('0.0.0.0', @
|
15
|
+
puts "*** Server side is up, port:#{@config.port}, with dns list: #{@config.dns_list.join(', ')}"
|
16
|
+
DCase::Server.supervise('0.0.0.0', @crypto, @config)
|
17
17
|
end
|
18
18
|
|
19
19
|
puts "*** Hit Ctrl+c to stop"
|
data/lib/dcase/config.rb
CHANGED
@@ -5,10 +5,10 @@ require File.expand_path('../version', __FILE__)
|
|
5
5
|
|
6
6
|
module DCase
|
7
7
|
class Config
|
8
|
-
attr_accessor :args, :side, :server, :port, :password, :config_path
|
8
|
+
attr_accessor :args, :side, :server, :port, :password, :dns_list, :config_path
|
9
9
|
|
10
|
-
def initialize(args)
|
11
|
-
@args = args
|
10
|
+
def initialize(args = [])
|
11
|
+
@args = args
|
12
12
|
|
13
13
|
parse_args
|
14
14
|
read_config
|
@@ -44,6 +44,7 @@ module DCase
|
|
44
44
|
@server = config["server"] if @server.nil?
|
45
45
|
@port = config["port"].to_i if @port.nil?
|
46
46
|
@password = config["password"] if @password.nil?
|
47
|
+
@dns_list = config["dns_list"] if @dns_list.nil?
|
47
48
|
end
|
48
49
|
|
49
50
|
def parse_args
|
@@ -73,6 +74,10 @@ module DCase
|
|
73
74
|
@password = c
|
74
75
|
end
|
75
76
|
|
77
|
+
opts.on("-l", "--dns-list LIST", "Password, should be same in client and server sides") do |c|
|
78
|
+
@dns_list = c.split(',').map(&:strip)
|
79
|
+
end
|
80
|
+
|
76
81
|
opts.on_tail("-v", "--version", "Show shadowsocks gem version") do
|
77
82
|
puts DCase::VERSION
|
78
83
|
exit
|
data/lib/dcase/local.rb
CHANGED
data/lib/dcase/server.rb
CHANGED
@@ -5,9 +5,12 @@ module DCase
|
|
5
5
|
|
6
6
|
attr_accessor :crypto
|
7
7
|
|
8
|
-
def initialize(host,
|
8
|
+
def initialize(host, crypto, config)
|
9
|
+
@config = config
|
10
|
+
|
9
11
|
@server = UDPSocket.new
|
10
|
-
@server.
|
12
|
+
@server.to_io.setsockopt(:SOCKET, :REUSEADDR, 1)
|
13
|
+
@server.bind(host, @config.port)
|
11
14
|
|
12
15
|
@crypto = crypto
|
13
16
|
|
@@ -27,7 +30,7 @@ module DCase
|
|
27
30
|
|
28
31
|
def handle_data(data, port, addr)
|
29
32
|
request = UDPSocket.new
|
30
|
-
request.send crypto.decrypt(data), 0,
|
33
|
+
request.send crypto.decrypt(data), 0, @config.dns_list.sample, 53
|
31
34
|
|
32
35
|
async.start_connect(request, port, addr)
|
33
36
|
end
|
data/lib/dcase/version.rb
CHANGED
@@ -0,0 +1,42 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
require_relative '../../lib/dcase/config.rb'
|
3
|
+
|
4
|
+
class TestConfig < TestCase
|
5
|
+
def test_local_params
|
6
|
+
config = DCase::Config.new ['-s', 'local']
|
7
|
+
|
8
|
+
assert_equal config.password, 'your password'
|
9
|
+
assert_equal config.server, '127.0.0.1'
|
10
|
+
assert_equal config.port, 8440
|
11
|
+
assert_equal config.dns_list, ['8.8.8.8', '8.8.4.4']
|
12
|
+
end
|
13
|
+
|
14
|
+
def test_server_params
|
15
|
+
config = DCase::Config.new ['-s', 'server']
|
16
|
+
|
17
|
+
assert_equal config.password, 'your password'
|
18
|
+
assert_equal config.server, '127.0.0.1'
|
19
|
+
assert_equal config.port, 8440
|
20
|
+
assert_equal config.dns_list, ['8.8.8.8', '8.8.4.4']
|
21
|
+
end
|
22
|
+
|
23
|
+
def test_local_with_command
|
24
|
+
config = DCase::Config.new ['-s', 'local', '-k', 'your password', '-r', '127.0.0.1', '-p', '8440']
|
25
|
+
assert_equal config.password, 'your password'
|
26
|
+
assert_equal config.server, '127.0.0.1'
|
27
|
+
assert_equal config.port, 8440
|
28
|
+
end
|
29
|
+
|
30
|
+
def test_server_with_command
|
31
|
+
config = DCase::Config.new ['-s', 'server', '-k', 'your password', '-r', '127.0.0.1', '-p', '8440', '-l', '8.8.8.8,8.8.4.4']
|
32
|
+
assert_equal config.password, 'your password'
|
33
|
+
assert_equal config.server, '127.0.0.1'
|
34
|
+
assert_equal config.port, 8440
|
35
|
+
assert_equal config.dns_list, ['8.8.8.8', '8.8.4.4']
|
36
|
+
end
|
37
|
+
|
38
|
+
def test_blank_side
|
39
|
+
e = assert_raises(RuntimeError) { DCase::Config.new }
|
40
|
+
assert_equal 'You need to define side of dcase in', e.message
|
41
|
+
end
|
42
|
+
end
|
data/test/test_helper.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dcase
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: '0.
|
4
|
+
version: '0.3'
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sen
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2014-
|
11
|
+
date: 2014-02-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: celluloid-io
|
@@ -108,6 +108,8 @@ files:
|
|
108
108
|
- lib/dcase/version.rb
|
109
109
|
- tasks/compile.rake
|
110
110
|
- tasks/dev.rake
|
111
|
+
- test/dcase/cli_test.rb
|
112
|
+
- test/dcase/config_test.rb
|
111
113
|
- test/test_helper.rb
|
112
114
|
homepage: https://github.com/Sen/DCase
|
113
115
|
licenses:
|