Skip to content

Commit dcd879e

Browse files
committed
better flags
1 parent 5e9a07e commit dcd879e

1 file changed

Lines changed: 34 additions & 18 deletions

File tree

certscan.go

Lines changed: 34 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -23,38 +23,52 @@ add www, mx, mail....
2323
// structure to store a domain and its edges
2424
type DomainNode struct {
2525
Domain string
26-
Depth int
26+
Depth uint
2727
Neighbors *[]string
2828
}
2929

3030
// vars
3131
var conf = &tls.Config{InsecureSkipVerify: true}
3232
var markedDomains = make(map[string]bool)
3333
var domainGraph = make(map[string]*DomainNode)
34-
var timeout time.Duration
34+
var depth uint
35+
36+
// flags
3537
var port string
38+
var timeout time.Duration
3639
var verbose bool
37-
var depth int
38-
var maxDepth int
39-
var parallel int
40+
var maxDepth uint
41+
var parallel uint
4042

4143
func main() {
42-
host := flag.String("host", "localhost", "Host to Scan")
43-
flag.StringVar(&port, "port", "443", "Port to connect to")
44-
timeoutPtr := flag.Int("timeout", 5, "TCP Timeout in seconds")
45-
flag.BoolVar(&verbose, "verbose", false, "Verbose logging")
46-
flag.IntVar(&maxDepth, "depth", 20, "Maximum BFS depth to go")
47-
flag.IntVar(&parallel, "parallel", 10, "Number of certificates to retrieve in parallel")
44+
flag.StringVar(&port, "port", "443", "tcp port to connect to") // TODO make uint
45+
timeoutPtr := flag.Uint("timeout", 5, "tcp timeout in seconds")
46+
flag.BoolVar(&verbose, "verbose", false, "verbose logging")
47+
flag.UintVar(&maxDepth, "depth", 20, "maximum BFS depth to go")
48+
flag.UintVar(&parallel, "parallel", 10, "number of certificates to retrieve in parallel")
49+
flag.Usage = func() {
50+
fmt.Fprintf(os.Stderr, "Usage of %s: [OPTION]... HOST...\n", os.Args[0])
51+
flag.PrintDefaults()
52+
}
4853

4954
flag.Parse()
55+
if flag.NArg() < 1 {
56+
fmt.Fprintln(os.Stderr, "Pass at least one domain to scan")
57+
flag.Usage()
58+
return
59+
}
5060
if parallel < 1 {
5161
fmt.Fprintln(os.Stderr, "Must enter a positive number of parallel threads")
62+
flag.Usage()
5263
return
5364
}
5465
timeout = time.Duration(*timeoutPtr) * time.Second
55-
startDomain := strings.ToLower(*host)
66+
startDomains := flag.Args()
67+
for i := range startDomains {
68+
startDomains[i] = strings.ToLower(startDomains[i])
69+
}
5670

57-
BFS(startDomain)
71+
BFS(startDomains)
5872

5973
v("Done...")
6074

@@ -63,7 +77,7 @@ func main() {
6377
v("Graph Depth:", depth)
6478
}
6579

66-
// Verbose Log
80+
// verbose log
6781
func v(a ...interface{}) {
6882
if verbose {
6983
fmt.Fprintln(os.Stderr, a...)
@@ -120,19 +134,21 @@ func printGraph() {
120134
}
121135

122136
// perform Breadth-first_search to build the graph
123-
func BFS(root string) {
137+
func BFS(roots []string) {
124138
var wg sync.WaitGroup
125139
domainChan := make(chan *DomainNode, 5)
126140
domainGraphChan := make(chan *DomainNode, 5)
127141

128142
// thread limit code
129143
threadPass := make(chan bool, parallel)
130-
for i := 0; i < parallel; i++ {
144+
for i := uint(0); i < parallel; i++ {
131145
threadPass <- true
132146
}
133147

134-
wg.Add(1)
135-
domainChan <- &DomainNode{root, 0, nil}
148+
for _, root := range roots { // TODO test
149+
wg.Add(1)
150+
domainChan <- &DomainNode{root, 0, nil}
151+
}
136152
go func() {
137153
for {
138154
domainNode := <-domainChan

0 commit comments

Comments
 (0)