Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
R00tS3c
GitHub Repository: R00tS3c/DDOS-RootSec
Path: blob/master/DDOS Scripts/L7/CF-bypass.go
4607 views
1
package main
2
3
import (
4
"fmt"
5
"flag"
6
"os"
7
"strings"
8
"log"
9
"io"
10
"bufio"
11
"sync"
12
"./providers"
13
"./http"
14
"./output"
15
)
16
17
const (
18
currentVersion = "1.00"
19
)
20
21
func run(config *providers.Config, domains []string) {
22
var allProviders []providers.Provider
23
24
for _, providerName := range config.Providers {
25
switch providerName {
26
case "viewdns":
27
viewDNSObj := providers.NewViewDns(config)
28
allProviders = append(allProviders, viewDNSObj)
29
default:
30
fmt.Fprintf(os.Stderr, "Error: %s is not a valid provider\n", providerName)
31
}
32
}
33
34
resultsChannel := make(chan string)
35
writewg := &sync.WaitGroup{}
36
writewg.Add(1)
37
38
// Start writer thread
39
go func() {
40
defer writewg.Done()
41
err := output.Write(resultsChannel, config.Output)
42
if nil != err {
43
fmt.Fprintln(os.Stderr, err)
44
os.Exit(1)
45
}
46
}()
47
48
for _, domain := range domains {
49
// Run all providers in parallel
50
wg := &sync.WaitGroup{}
51
wg.Add(len(allProviders))
52
53
for _, provider := range allProviders {
54
go func(p providers.Provider) {
55
defer wg.Done()
56
err := p.BypassCF(domain, resultsChannel)
57
if nil != err && config.Verbose {
58
fmt.Fprintln(os.Stderr, err)
59
}
60
}(provider)
61
}
62
// Wait for providers to finish
63
wg.Wait()
64
}
65
66
// Close results channel so the writer can return
67
close(resultsChannel)
68
// Wait for writer to finish
69
writewg.Wait()
70
os.Exit(0)
71
}
72
73
func main() {
74
verbose := flag.Bool("v", false, "enable verbose mode")
75
useProviders := flag.String("providers", "viewdns", "providers to try")
76
version := flag.Bool("version", false, "show cf-bypass version")
77
maxRetries := flag.Uint("retries", 5, "amount of retries for http client")
78
output := flag.String("o", "", "filename to write results to")
79
flag.Parse()
80
81
if *version {
82
fmt.Printf("CF-bypass %v\n", currentVersion)
83
os.Exit(0)
84
}
85
86
var out io.Writer
87
88
if "" == *output {
89
out = os.Stdout
90
} else {
91
fp, err := os.OpenFile(*output, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644)
92
if nil != err {
93
log.Fatalf("Could not open output file: %v\n", err)
94
}
95
defer fp.Close()
96
out = fp
97
}
98
99
var domains []string
100
101
if flag.NArg() > 0 {
102
domains = flag.Args()
103
} else {
104
scanner := bufio.NewScanner(os.Stdin)
105
for scanner.Scan() {
106
domains = append(domains, scanner.Text())
107
}
108
}
109
110
config := providers.Config {
111
Verbose: *verbose,
112
Output: out,
113
Providers: strings.Split(*useProviders, ","),
114
Client: http.NewHTTPClient(*maxRetries),
115
}
116
117
run(&config, domains)
118
}
119
120