Compare commits
No commits in common. "bc4aeb3124ef3b1806a34fb39f7cbbf9ec999e35" and "aac3959dc72891fc86777d01e6e9603c7c19e6cd" have entirely different histories.
bc4aeb3124
...
aac3959dc7
|
@ -3,34 +3,25 @@ before:
|
||||||
- go mod download
|
- go mod download
|
||||||
- go generate ./...
|
- go generate ./...
|
||||||
builds:
|
builds:
|
||||||
- main: ./cmd/sclient/
|
- main: ./cmd/sclient/main.go
|
||||||
env:
|
env:
|
||||||
- CGO_ENABLED=0
|
- CGO_ENABLED=0
|
||||||
goos:
|
goos:
|
||||||
- darwin
|
|
||||||
- linux
|
- linux
|
||||||
- freebsd
|
|
||||||
- windows
|
- windows
|
||||||
- js
|
- darwin
|
||||||
goarch:
|
goarch:
|
||||||
|
- 386
|
||||||
- amd64
|
- amd64
|
||||||
- arm
|
- arm
|
||||||
- arm64
|
- arm64
|
||||||
- wasm
|
|
||||||
goarm:
|
goarm:
|
||||||
|
- 6
|
||||||
- 7
|
- 7
|
||||||
goamd64:
|
|
||||||
- v2
|
|
||||||
ignore:
|
|
||||||
- goos: windows
|
|
||||||
goarch: 386
|
|
||||||
- goos: windows
|
|
||||||
goarm: 6
|
|
||||||
- goos: windows
|
|
||||||
goarm: 7
|
|
||||||
archives:
|
archives:
|
||||||
- id: sclient-binary
|
- replacements:
|
||||||
format: tar.xz
|
386: i386
|
||||||
|
amd64: x86_64
|
||||||
format_overrides:
|
format_overrides:
|
||||||
- goos: windows
|
- goos: windows
|
||||||
format: zip
|
format: zip
|
||||||
|
|
18
README.md
18
README.md
|
@ -70,11 +70,10 @@ sclient [flags] <remote> <local>
|
||||||
```
|
```
|
||||||
|
|
||||||
- flags
|
- flags
|
||||||
- `-s`, `--silent` less verbose logging
|
- -s, --silent less verbose logging
|
||||||
- `-k`, `--insecure` ignore invalid TLS (SSL/HTTPS) certificates
|
- -k, --insecure ignore invalid TLS (SSL/HTTPS) certificates
|
||||||
- `--servername <domain>` spoof SNI (to disable use IP as <remote> and do
|
- --servername <string> spoof SNI (to disable use IP as <remote> and do
|
||||||
not use this option)
|
not use this option)
|
||||||
- `--alpn <protocol-list>`
|
|
||||||
- remote
|
- remote
|
||||||
- must have servername (i.e. example.com)
|
- must have servername (i.e. example.com)
|
||||||
- port is optional (default is 443)
|
- port is optional (default is 443)
|
||||||
|
@ -82,17 +81,6 @@ sclient [flags] <remote> <local>
|
||||||
- address is optional (default is localhost)
|
- address is optional (default is localhost)
|
||||||
- must have port (i.e. 3000)
|
- must have port (i.e. 3000)
|
||||||
|
|
||||||
-alpn string
|
|
||||||
acceptable protocols, ex: 'h2,http/1.1' 'http/1.1' (default) 'ssh' (default "http/1.1")
|
|
||||||
-insecure
|
|
||||||
ignore bad TLS/SSL/HTTPS certificates
|
|
||||||
-k alias for --insecure
|
|
||||||
-s alias of --silent
|
|
||||||
-servername string
|
|
||||||
specify a servername different from <remote> (to disable SNI use an IP as <remote> and do use this option)
|
|
||||||
-silent
|
|
||||||
less verbose output
|
|
||||||
|
|
||||||
# Examples
|
# Examples
|
||||||
|
|
||||||
Bridge between `telebit.cloud` and local port `3000`.
|
Bridge between `telebit.cloud` and local port `3000`.
|
||||||
|
|
|
@ -40,30 +40,20 @@ func usage() {
|
||||||
|
|
||||||
func main() {
|
func main() {
|
||||||
if len(os.Args) >= 2 {
|
if len(os.Args) >= 2 {
|
||||||
if os.Args[1] == "-V" || strings.TrimLeft(os.Args[1], "-") == "version" {
|
if "version" == strings.TrimLeft(os.Args[1], "-") {
|
||||||
fmt.Printf("%s\n", ver())
|
fmt.Printf("%s\n", ver())
|
||||||
os.Exit(0)
|
os.Exit(0)
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
var alpnList string
|
|
||||||
var insecure bool
|
|
||||||
var servername string
|
|
||||||
var silent bool
|
|
||||||
|
|
||||||
flag.Usage = usage
|
flag.Usage = usage
|
||||||
|
insecure := flag.Bool("k", false, "alias for --insecure")
|
||||||
flag.StringVar(&alpnList, "alpn", "", "acceptable protocols, ex: 'h2,http/1.1' 'http/1.1' 'ssh'")
|
silent := flag.Bool("s", false, "alias of --silent")
|
||||||
flag.BoolVar(&insecure, "k", false, "alias for --insecure")
|
servername := flag.String("servername", "", "specify a servername different from <remote> (to disable SNI use an IP as <remote> and do use this option)")
|
||||||
flag.BoolVar(&silent, "s", false, "alias of --silent")
|
flag.BoolVar(insecure, "insecure", false, "ignore bad TLS/SSL/HTTPS certificates")
|
||||||
flag.StringVar(&servername, "servername", "", "specify a servername different from <remote> (to disable SNI use an IP as <remote> and do not use this option)")
|
flag.BoolVar(silent, "silent", false, "less verbose output")
|
||||||
flag.BoolVar(&insecure, "insecure", false, "ignore bad TLS/SSL/HTTPS certificates")
|
|
||||||
flag.BoolVar(&silent, "silent", false, "less verbose output")
|
|
||||||
|
|
||||||
flag.Parse()
|
flag.Parse()
|
||||||
|
|
||||||
alpns := parseOptionList(alpnList)
|
|
||||||
remotestr := flag.Arg(0)
|
remotestr := flag.Arg(0)
|
||||||
localstr := flag.Arg(1)
|
localstr := flag.Arg(1)
|
||||||
|
|
||||||
|
@ -81,10 +71,9 @@ func main() {
|
||||||
sclient := &sclient.Tunnel{
|
sclient := &sclient.Tunnel{
|
||||||
RemotePort: 443,
|
RemotePort: 443,
|
||||||
LocalAddress: "localhost",
|
LocalAddress: "localhost",
|
||||||
InsecureSkipVerify: insecure,
|
InsecureSkipVerify: *insecure,
|
||||||
ServerName: servername,
|
ServerName: *servername,
|
||||||
Silent: silent,
|
Silent: *silent,
|
||||||
NextProtos: alpns,
|
|
||||||
}
|
}
|
||||||
|
|
||||||
remote := strings.Split(remotestr, ":")
|
remote := strings.Split(remotestr, ":")
|
||||||
|
@ -135,18 +124,3 @@ func main() {
|
||||||
//os.Exit(6)
|
//os.Exit(6)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// parsers "a,b,c" "a b c" and "a, b, c" all the same
|
|
||||||
func parseOptionList(optionList string) []string {
|
|
||||||
optionList = strings.TrimSpace(optionList)
|
|
||||||
|
|
||||||
if len(optionList) == 0 {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
options := []string{}
|
|
||||||
optionList = strings.ReplaceAll(optionList, ",", " ")
|
|
||||||
options = strings.Fields(optionList)
|
|
||||||
|
|
||||||
return options
|
|
||||||
}
|
|
||||||
|
|
|
@ -17,7 +17,6 @@ type Tunnel struct {
|
||||||
LocalAddress string
|
LocalAddress string
|
||||||
LocalPort int
|
LocalPort int
|
||||||
InsecureSkipVerify bool
|
InsecureSkipVerify bool
|
||||||
NextProtos []string
|
|
||||||
ServerName string
|
ServerName string
|
||||||
Silent bool
|
Silent bool
|
||||||
}
|
}
|
||||||
|
@ -30,7 +29,6 @@ func (t *Tunnel) DialAndListen() error {
|
||||||
&tls.Config{
|
&tls.Config{
|
||||||
ServerName: t.ServerName,
|
ServerName: t.ServerName,
|
||||||
InsecureSkipVerify: t.InsecureSkipVerify,
|
InsecureSkipVerify: t.InsecureSkipVerify,
|
||||||
NextProtos: t.NextProtos,
|
|
||||||
})
|
})
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
Loading…
Reference in New Issue