博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
golang并发ping主机
阅读量:6886 次
发布时间:2019-06-27

本文共 1706 字,大约阅读时间需要 5 分钟。

版权声明:本文可能为博主原创文章,若标明出处可随便转载。 https://blog.csdn.net/Jailman/article/details/81286726

利用了golang对高并发的良好支持,同目录下将ip每行一个写入pinglist.txt文件即可

其实这个功能用linux一条命令就能搞定:
cat pinglist.txt | xargs -P 10 -I {} ping -fc 100 {}

package mainimport (    "bufio"    "bytes"    "fmt"    "io"    "io/ioutil"    "log"    "os"    "os/exec"    "strings"    "sync"    "runtime")func RunCMD(command string) string {    in := bytes.NewBuffer(nil)    cmd := exec.Command("sh")    cmd.Stdin = in    in.WriteString(command + "\n")    stdout, err := cmd.StdoutPipe()    if err != nil {        log.Fatal(err)    }    defer stdout.Close()    if err := cmd.Start(); err != nil {        log.Fatal(err)    }    opBytes, err := ioutil.ReadAll(stdout)    if err != nil {        log.Fatal(err)    }    return string(opBytes)}func ping(ip string) string {    cmd := "ping -fc 100 " + ip    return RunCMD(cmd)}var ips = []string{}func main() {    runtime.GOMAXPROCS(runtime.NumCPU())    fileName := "pinglist.txt"    f, err := os.Open(fileName)    if err != nil {        fmt.Println(err)    }    buf := bufio.NewReader(f)    for {        line, err := buf.ReadString('\n')        line = strings.TrimSpace(line)        if err != nil {            if err == io.EOF {                //fmt.Println("File read over!")                break            }            fmt.Println(err)        }        ips = append(ips, line)    }    wg := &sync.WaitGroup{}    ch := make(chan string, len(ips))    //fmt.Println(ips)    for i:= 0; i < len(ips); i++ {        wg.Add(1)        go func(i int) {            ch <- ping(ips[i])            wg.Done()        }(i)    }    wg.Wait()    //fmt.Println(len(ch))    for i := 0; i < len(ips); i++ {        fmt.Println(<-ch)    }}
你可能感兴趣的文章
威胁快报|Nexus Repository Manager 3新漏洞已被用于挖矿木马传播,建议用户尽快修复...
查看>>
关于redis,学会这8点就够了
查看>>
阿里小二的日常工作要被TA们“接管”了!
查看>>
权限框架Shiro学习之表结构设计
查看>>
Nginx 服务器之速率限制
查看>>
JavaScript实现多态和继承的封装操作示例
查看>>
大数据平台开发公司有哪些?
查看>>
用vs运行cmake后的工程
查看>>
1.1 函数定义 1.2 函数的参数 1.3 函数的默认参数
查看>>
不学无数——Java动态代理
查看>>
如何使用手机、家庭宽带作为爬虫的代理服务器
查看>>
Python黑客攻击的几种技术,你得了解一下
查看>>
你真的懂了redis的数据结构吗?redis内部数据结构和外部数据结构揭秘
查看>>
Ubuntu10.04LTS配置Hadoop1.0.1+HBase 0.92.0
查看>>
ST教学分析:相同行为连续数
查看>>
status2 转义输出
查看>>
[清华集训2016]如何优雅地求和——NTT
查看>>
JavaScript 原型链例子讲解
查看>>
书摘---创业36条军规7:业务的五个问题
查看>>
Linux学习-第三节课
查看>>