start making Sammy into something kind of reusable

This commit is contained in:
idk
2020-09-13 16:37:09 -04:00
parent 7a4fa112ea
commit 3325b132b7
3 changed files with 35 additions and 7 deletions

View File

@ -17,7 +17,7 @@ func main() {
// create a transport that uses SAM to dial TCP Connections // create a transport that uses SAM to dial TCP Connections
conf := &socks5.Config{ conf := &socks5.Config{
Dial: sam.DialContext, Dial: sam.DialContext,
Resolver: sam, Resolver: sam,
} }
server, err := socks5.New(conf) server, err := socks5.New(conf)

View File

@ -6,15 +6,43 @@ import (
"os" "os"
) )
func Sammy() (*sam3.StreamListener, error) { func RandStringBytes() string {
if sam, err := sam3.NewSAM("127.0.0.1:7656"); err != nil { letterBytes := "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
b := make([]byte, 4)
for i := range b {
b[i] = letterBytes[rand.Intn(len(letterBytes))]
}
return string(b)
}
func Sammy(opts map[string]string) (*sam3.StreamListener, error) {
sam := ""
keypath := ""
servertun := ""
if opts != nil {
if ok, _ := opts[`sam`]; !ok {
opts[`sam`] = "127.0.0.1:7656"
}
if ok, _ := opts[`keypath`]; !ok {
opts[`keypath`] = "keys.i2pkeys"
}
if ok, _ := opts[`servertun`]; !ok {
opts[`servertun`] = "serv" + randStringBytes()
}
} else {
opts := make(map[string]string)
opts[`sam`] = "127.0.0.1:7656"
opts[`keypath`] = "keys.i2pkeys"
opts[`servertun`] = "serv" + randStringBytes()
}
if sam, err := sam3.NewSAM(opts[`sam`]); err != nil {
return nil, err return nil, err
} else { } else {
if file, err := os.Open("../keys.i2pkeys"); err == nil { if file, err := os.Open(opt[`keypath`]); err == nil {
if keys, err := i2pkeys.LoadKeysIncompat(file); err != nil { if keys, err := i2pkeys.LoadKeysIncompat(file); err != nil {
return nil, err return nil, err
} else { } else {
if stream, err := sam.NewStreamSession("serverTun", keys, sam3.Options_Fat); err != nil { if stream, err := sam.NewStreamSession(opt[`servertun`], keys, sam3.Options_Fat); err != nil {
return nil, err return nil, err
} else { } else {
return stream.Listen() return stream.Listen()
@ -24,13 +52,13 @@ func Sammy() (*sam3.StreamListener, error) {
if keys, err := sam.NewKeys(); err != nil { if keys, err := sam.NewKeys(); err != nil {
return nil, err return nil, err
} else { } else {
if file, err := os.Create("../keys.i2pkeys"); err != nil { if file, err := os.Create(opt[`keypath`]); err != nil {
return nil, err return nil, err
} else { } else {
if err := i2pkeys.StoreKeysIncompat(keys, file); err != nil { if err := i2pkeys.StoreKeysIncompat(keys, file); err != nil {
return nil, err return nil, err
} }
if stream, err := sam.NewStreamSession("serverTun", keys, sam3.Options_Fat); err != nil { if stream, err := sam.NewStreamSession(opt[`servertun`], keys, sam3.Options_Fat); err != nil {
return nil, err return nil, err
} else { } else {
return stream.Listen() return stream.Listen()

BIN
samsocks

Binary file not shown.