Проблема с буфером в Голанге - PullRequest
0 голосов
/ 22 сентября 2018

Я работаю с многопоточными и сериализованными процессами и хочу автоматизировать процесс восстановления.

Мой код работает, как и ожидалось, пока я не вызывает функциюназывается nmap.Когда вызывается nmap, он завершается со следующей ошибкой:

. / Recon-s.go: 54: 12: недостаточно аргументов в вызове nmap have () want (chan <-[] байт) </p>

Это мой код:

package main

import (
    "fmt"
    "log"
    "os/exec"
    "sync"
)

var url string
var wg sync.WaitGroup
var ip string
func nikto(outChan chan<- []byte) {
    cmd := exec.Command("nikto", "-h", url)
    bs, err := cmd.Output()
    if err != nil {
        log.Fatal(err)
    }
    outChan <- bs
    wg.Done()
}

func whois(outChan chan<- []byte) {

    cmd := exec.Command("whois",url)
    bs, err := cmd.Output()
    if err != nil {
        log.Fatal(err)
    }
    outChan <- bs
    wg.Done()
}
func nmap (outChan chan<-[]byte) {
    fmt.Printf("Please input IP")
    fmt.Scanln(&ip)
    cmd := exec.Command("nmap","-sC","-sV","-oA","nmap",ip)
    bs,err := cmd.Output()
    if err != nil {
    log.Fatal(err)
    }
    outChan <- bs
    wg.Done()
    }
func main() {
    outChan := make(chan []byte)

    fmt.Printf("Please input URL")
    fmt.Scanln(&url)
    wg.Add(1)
    go nikto(outChan)
    wg.Add(1)
    go whois(outChan)
    wg.Add(1)
    go nmap()
    for i := 0; i < 3; i++ {
        bs := <-outChan
        fmt.Println(string(bs))
    }

    close(outChan)
    wg.Wait()
}

1 Ответ

0 голосов
/ 22 сентября 2018

Ошибка, которую вы получаете:

недостаточно аргументов при вызове nmap have () want (chan <- [] byte) </p>

Это означает, что метод nmap() из main не имеет никакого аргумента, но фактическое определение nmap() требует аргумента, подобного chan<-[]byte, поэтому вы должны передать аргумент из nmap(), как показано ниже. Я упомянул аргумент, какой вы простопропустил.

  func main() {
        outChan := make(chan []byte)

        fmt.Printf("Please input URL")
        fmt.Scanln(&url)
        wg.Add(1)
        go nikto(outChan)
        wg.Add(1)
        go whois(outChan) 
        wg.Add(1)
        go nmap(outChan) //you are just missing the argument here.
        for i := 0; i < 3; i++ {
            bs := <-outChan
            fmt.Println(string(bs))
        }

        close(outChan)
        wg.Wait()
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...