/
tor_embed.go
63 lines (53 loc) · 1.14 KB
/
tor_embed.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
//go:build !torcmd
// +build !torcmd
package bukanir
import (
"os"
"strconv"
"runtime"
libtor "github.com/gen2brain/go-libtor"
bine "github.com/cretz/bine/tor"
)
// tor type
type tor struct {
User string
Port string
CtrlPort string
DataDir string
Command *bine.Tor
}
// Exists checks if Tor binary exists
func (t *tor) Exists() bool {
return true
}
// Start starts Tor
func (t *tor) Start() error {
ctrl, _ := strconv.Atoi(t.CtrlPort)
conf := &bine.StartConf{
//NoHush: true,
//DebugWriter: os.Stderr,
ProcessCreator: libtor.Creator,
DataDir: t.DataDir,
ControlPort: ctrl,
EnableNetwork: true,
DisableCookieAuth: true,
DisableEagerAuth: true,
NoAutoSocksPort: true,
UseEmbeddedControlConn: runtime.GOOS == "linux",
ExtraArgs: []string{"--SocksPort", t.Port, "--quiet"},
}
b, err := bine.Start(nil, conf)
if err != nil {
return err
}
t.Command = b
return nil
}
// Stop stops Tor
func (t *tor) Stop() error {
defer os.RemoveAll(t.DataDir)
if t.Command == nil {
return nil
}
return t.Command.Close()
}