-
Notifications
You must be signed in to change notification settings - Fork 24
/
main.go
55 lines (50 loc) · 1.15 KB
/
main.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
// vtFileSearch - shows how to use VT Intelligence to search for files that match certain criteria.
//
// scusi@posteo.de
//
package main
import (
"flag"
"fmt"
"github.com/williballenthin/govt"
"log"
"os"
)
var apikey string
var query string
var hashlist []string
var offset string
var Client *govt.Client
var err error
func init() {
flag.StringVar(&apikey, "apikey", os.Getenv("VT_API_KEY"), "Set environment variable VT_API_KEY to your VT API Key or specify on prompt")
flag.StringVar(&query, "query", "", "your search request")
}
func main() {
flag.Parse()
Client, err = govt.New(
govt.SetErrorLog(log.New(os.Stderr, "VT: ", log.Lshortfile)),
govt.SetApikey(apikey),
)
offset = ""
fetchAllHashes(query, offset)
fmt.Printf("found %d matches:\n", len(hashlist))
for i, h := range hashlist {
fmt.Printf("[%04d]\t\t%s\n", i, h)
}
}
func fetchAllHashes(query, offset string) {
result, err := Client.SearchFile(query, offset)
if err != nil {
log.Fatal(err)
}
//fmt.Printf("%+v\n", result)
offset = result.Offset
for _, h := range result.Hashes {
hashlist = append(hashlist, h)
}
if offset != "" {
fetchAllHashes(query, offset)
}
return
}