Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
122 changes: 103 additions & 19 deletions README.md

Large diffs are not rendered by default.

23 changes: 19 additions & 4 deletions cmd/chain.go
Original file line number Diff line number Diff line change
Expand Up @@ -100,15 +100,29 @@ func buildStep(cfg stepConfig, defaultTimeout, defaultCount int, ports chan int,
if !ok || pubkey == "" {
return scanner.Step{}, fmt.Errorf("step %q: missing required param 'pubkey'", cfg.name)
}
return scanner.Step{Name: "e2e/dnstt", Timeout: dur, Check: scanner.DnsttCheckBin(binPaths["dnstt-client"], domain, pubkey, ports), SortBy: "socks_ms"}, nil
opts := scanner.SOCKS5Opts{User: cfg.params["socks-user"], Pass: cfg.params["socks-pass"], ConnectAddr: cfg.params["connect-addr"]}
return scanner.Step{Name: "e2e/dnstt", Timeout: dur, Check: scanner.DnsttCheckBin(binPaths["dnstt-client"], domain, pubkey, ports, opts), SortBy: "socks_ms"}, nil

case "e2e/slipstream":
domain, ok := cfg.params["domain"]
if !ok || domain == "" {
return scanner.Step{}, fmt.Errorf("step %q: missing required param 'domain'", cfg.name)
}
cert := cfg.params["cert"]
return scanner.Step{Name: "e2e/slipstream", Timeout: dur, Check: scanner.SlipstreamCheckBin(binPaths["slipstream-client"], domain, cert, ports), SortBy: "e2e_ms"}, nil
opts := scanner.SOCKS5Opts{User: cfg.params["socks-user"], Pass: cfg.params["socks-pass"], ConnectAddr: cfg.params["connect-addr"]}
return scanner.Step{Name: "e2e/slipstream", Timeout: dur, Check: scanner.SlipstreamCheckBin(binPaths["slipstream-client"], domain, cert, ports, opts), SortBy: "e2e_ms"}, nil

case "throughput/dnstt":
domain, ok := cfg.params["domain"]
if !ok || domain == "" {
return scanner.Step{}, fmt.Errorf("step %q: missing required param 'domain'", cfg.name)
}
pubkey, ok := cfg.params["pubkey"]
if !ok || pubkey == "" {
return scanner.Step{}, fmt.Errorf("step %q: missing required param 'pubkey'", cfg.name)
}
opts := scanner.SOCKS5Opts{User: cfg.params["socks-user"], Pass: cfg.params["socks-pass"], ConnectAddr: cfg.params["connect-addr"]}
return scanner.Step{Name: "throughput/dnstt", Timeout: dur, Check: scanner.ThroughputCheckBin(binPaths["dnstt-client"], domain, pubkey, ports, opts), SortBy: "throughput_ms"}, nil

case "nxdomain":
return scanner.Step{Name: "nxdomain", Timeout: dur, Check: scanner.NXDomainCheck(stepCount), SortBy: "hijack"}, nil
Expand Down Expand Up @@ -143,7 +157,8 @@ func buildStep(cfg stepConfig, defaultTimeout, defaultCount int, ports chan int,
if !ok || pubkey == "" {
return scanner.Step{}, fmt.Errorf("step %q: missing required param 'pubkey'", cfg.name)
}
return scanner.Step{Name: "doh/e2e", Timeout: dur, Check: scanner.DoHDnsttCheckBin(binPaths["dnstt-client"], domain, pubkey, ports), SortBy: "e2e_ms"}, nil
opts := scanner.SOCKS5Opts{User: cfg.params["socks-user"], Pass: cfg.params["socks-pass"], ConnectAddr: cfg.params["connect-addr"]}
return scanner.Step{Name: "doh/e2e", Timeout: dur, Check: scanner.DoHDnsttCheckBin(binPaths["dnstt-client"], domain, pubkey, ports, opts), SortBy: "e2e_ms"}, nil

default:
return scanner.Step{}, fmt.Errorf("unknown step type %q", cfg.name)
Expand All @@ -168,7 +183,7 @@ func runChain(cmd *cobra.Command, args []string) error {
binPaths := make(map[string]string) // "dnstt-client" -> resolved path
for _, cfg := range configs {
switch cfg.name {
case "e2e/dnstt", "doh/e2e":
case "e2e/dnstt", "doh/e2e", "throughput/dnstt":
if _, ok := binPaths["dnstt-client"]; !ok {
bin, err := findBinary("dnstt-client")
if err != nil {
Expand Down
9 changes: 8 additions & 1 deletion cmd/doh_e2e.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,9 @@ var dohE2ECmd = &cobra.Command{
func init() {
dohE2ECmd.Flags().String("domain", "", "DNSTT tunnel domain")
dohE2ECmd.Flags().String("pubkey", "", "DNSTT server public key")
dohE2ECmd.Flags().String("socks-user", "", "SOCKS5 username for proxy auth")
dohE2ECmd.Flags().String("socks-pass", "", "SOCKS5 password for proxy auth")
dohE2ECmd.Flags().String("connect-addr", "", "host:port for SOCKS5 CONNECT probe (default example.com:80)")
dohE2ECmd.MarkFlagRequired("domain")
dohE2ECmd.MarkFlagRequired("pubkey")
dohCmd.AddCommand(dohE2ECmd)
Expand All @@ -28,6 +31,9 @@ func init() {
func runDoHE2E(cmd *cobra.Command, args []string) error {
domain, _ := cmd.Flags().GetString("domain")
pubkey, _ := cmd.Flags().GetString("pubkey")
socksUser, _ := cmd.Flags().GetString("socks-user")
socksPass, _ := cmd.Flags().GetString("socks-pass")
connectAddr, _ := cmd.Flags().GetString("connect-addr")
bin, err := findBinary("dnstt-client")
if err != nil {
return err
Expand All @@ -40,7 +46,8 @@ func runDoHE2E(cmd *cobra.Command, args []string) error {

dur := time.Duration(e2eTimeout) * time.Second
ports := scanner.PortPool(30000, workers)
check := scanner.DoHDnsttCheckBin(bin, domain, pubkey, ports)
opts := scanner.SOCKS5Opts{User: socksUser, Pass: socksPass, ConnectAddr: connectAddr}
check := scanner.DoHDnsttCheckBin(bin, domain, pubkey, ports, opts)

ctx, stop := signal.NotifyContext(context.Background(), os.Interrupt)
defer stop()
Expand Down
9 changes: 8 additions & 1 deletion cmd/e2e_dnstt.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,6 +20,9 @@ var e2eDnsttCmd = &cobra.Command{
func init() {
e2eDnsttCmd.Flags().String("domain", "", "DNSTT tunnel domain")
e2eDnsttCmd.Flags().String("pubkey", "", "DNSTT server public key")
e2eDnsttCmd.Flags().String("socks-user", "", "SOCKS5 username for proxy auth")
e2eDnsttCmd.Flags().String("socks-pass", "", "SOCKS5 password for proxy auth")
e2eDnsttCmd.Flags().String("connect-addr", "", "host:port for SOCKS5 CONNECT probe (default example.com:80)")
e2eDnsttCmd.MarkFlagRequired("domain")
e2eDnsttCmd.MarkFlagRequired("pubkey")
e2eCmd.AddCommand(e2eDnsttCmd)
Expand All @@ -28,6 +31,9 @@ func init() {
func runE2EDnstt(cmd *cobra.Command, args []string) error {
domain, _ := cmd.Flags().GetString("domain")
pubkey, _ := cmd.Flags().GetString("pubkey")
socksUser, _ := cmd.Flags().GetString("socks-user")
socksPass, _ := cmd.Flags().GetString("socks-pass")
connectAddr, _ := cmd.Flags().GetString("connect-addr")
bin, err := findBinary("dnstt-client")
if err != nil {
return err
Expand All @@ -40,7 +46,8 @@ func runE2EDnstt(cmd *cobra.Command, args []string) error {

dur := time.Duration(e2eTimeout) * time.Second
ports := scanner.PortPool(30000, workers)
check := scanner.DnsttCheckBin(bin, domain, pubkey, ports)
opts := scanner.SOCKS5Opts{User: socksUser, Pass: socksPass, ConnectAddr: connectAddr}
check := scanner.DnsttCheckBin(bin, domain, pubkey, ports, opts)

ctx, stop := signal.NotifyContext(context.Background(), os.Interrupt)
defer stop()
Expand Down
9 changes: 8 additions & 1 deletion cmd/e2e_slipstream.go
Original file line number Diff line number Diff line change
Expand Up @@ -20,13 +20,19 @@ var e2eSlipstreamCmd = &cobra.Command{
func init() {
e2eSlipstreamCmd.Flags().String("domain", "", "Slipstream tunnel domain")
e2eSlipstreamCmd.Flags().String("cert", "", "path to Slipstream certificate for cert pinning (optional)")
e2eSlipstreamCmd.Flags().String("socks-user", "", "SOCKS5 username for proxy auth")
e2eSlipstreamCmd.Flags().String("socks-pass", "", "SOCKS5 password for proxy auth")
e2eSlipstreamCmd.Flags().String("connect-addr", "", "host:port for SOCKS5 CONNECT probe (default example.com:80)")
e2eSlipstreamCmd.MarkFlagRequired("domain")
e2eCmd.AddCommand(e2eSlipstreamCmd)
}

func runE2ESlipstream(cmd *cobra.Command, args []string) error {
domain, _ := cmd.Flags().GetString("domain")
certPath, _ := cmd.Flags().GetString("cert")
socksUser, _ := cmd.Flags().GetString("socks-user")
socksPass, _ := cmd.Flags().GetString("socks-pass")
connectAddr, _ := cmd.Flags().GetString("connect-addr")
bin, err := findBinary("slipstream-client")
if err != nil {
return err
Expand All @@ -39,7 +45,8 @@ func runE2ESlipstream(cmd *cobra.Command, args []string) error {

dur := time.Duration(e2eTimeout) * time.Second
ports := scanner.PortPool(30000, workers)
check := scanner.SlipstreamCheckBin(bin, domain, certPath, ports)
opts := scanner.SOCKS5Opts{User: socksUser, Pass: socksPass, ConnectAddr: connectAddr}
check := scanner.SlipstreamCheckBin(bin, domain, certPath, ports, opts)

ctx, stop := signal.NotifyContext(context.Background(), os.Interrupt)
defer stop()
Expand Down
Loading