Golang中的缓冲区问题

时间:2018-09-22 11:30:56

标签: linux go

我正在使用多线程和序列化进程,并且希望自动化我的侦察进程。

只要我不调用名为nmap的函数,我的代码就会像预期的那样工作。调用nmap时,它退出并显示以下错误:

  

./ recon-s.go:54:12:调用nmap的参数不足()   (chan <-[] byte)

这是我的代码:

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 :(得分:2)

您得到的错误是:

  

nmap调用中的参数不足,需要()个(chan <-[] byte)

这意味着nmap()方法中的main没有任何参数,但是实际的nmap()定义需要一个chan<-[]byte之类的参数,因此您必须从{{ 1}}就像下面提到的那样,您刚才错过了一个论点。

nmap()