duanliang1999 2018-09-22 11:30
浏览 64
已采纳

Golang中的缓冲区问题

I'm working with multi-threaded and serialized processes and want to automate my recon process.

My code works like expected, as long as i'm not calling a function called nmap. When nmap is called, it exits with the following error:

./recon-s.go:54:12: not enough arguments in call to nmap have () want (chan<- []byte)

This is my code:

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条回答 默认 最新

  • dongsou0083 2018-09-22 12:07
    关注

    The error which one you're getting is:

    not enough arguments in call to nmap have () want (chan<- []byte)

    It means nmap() from main method have not any argument but the actual nmap() definition want an argument like chan<-[]byte, So you have to pass an argument from nmap() like below I mentioned the argument which one you just missed.

      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()
        }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 安卓adb backup备份应用数据失败
  • ¥15 eclipse运行项目时遇到的问题
  • ¥15 关于#c##的问题:最近需要用CAT工具Trados进行一些开发
  • ¥15 南大pa1 小游戏没有界面,并且报了如下错误,尝试过换显卡驱动,但是好像不行
  • ¥15 没有证书,nginx怎么反向代理到只能接受https的公网网站
  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集
  • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)
  • ¥15 电力市场出清matlab yalmip kkt 双层优化问题
  • ¥30 ros小车路径规划实现不了,如何解决?(操作系统-ubuntu)