首页 > 其他分享 >go查看某段ip是否通的脚本

go查看某段ip是否通的脚本

时间:2022-10-10 14:25:49浏览次数:46  
标签:wg err 某段 ip fmt ping Printf go

go查看某段ip是否通的脚本

例1:

package main

import (
   "fmt"
   "golang.org/x/text/encoding/simplifiedchinese"
   "os/exec"
   "strings"
   "sync"
)

func ping(ip string, pong chan string, wg *sync.WaitGroup) {
   defer wg.Done()
   cmd := exec.Command("ping", ip)
   out, err := cmd.CombinedOutput()
   if err != nil {
      fmt.Printf("ping %s 失败, err:%s\n", ip, err)
      pong <- fmt.Sprintf("%s  ====>  %v", ip, false)
      return
   }
   output, err := simplifiedchinese.GBK.NewDecoder().Bytes(out)
   if err != nil {
      fmt.Printf("编码 %+v 失败, err:%s\n", out, err)
      pong <- fmt.Sprintf("%s  ====>  %v", ip, false)
      return
   }
   info := string(output)
   fmt.Printf("ping %s 成功, 返回信息:%s\n", ip, info)
   exist := strings.Contains(info, "TTL=")
   if !exist {
      pong <- fmt.Sprintf("%s  ====>  %v", ip, false)
      return
   }
   pong <- fmt.Sprintf("%s  ====>  %v", ip, true)
}

func main() {
   prex := "172.16.90."
   start := 10
   end := 30
   result := make(chan string, end-start)
   wg := sync.WaitGroup{}
   wg.Add(end - start)
   for i := start; i < end; i++ {
      go ping(fmt.Sprintf("%s%d", prex, i), result, &wg)
   }
   wg.Wait()
   close(result)
   for v := range result {
      fmt.Printf("%s\n", v)
   }
}

运行

image-20221009172321300

例2

package main

import (
   "fmt"
   "golang.org/x/text/encoding/simplifiedchinese"
   "os/exec"
   "strings"
)

type pinger struct {
   ip   string
   tong chan bool
}

func (p *pinger) ping() {
   fmt.Printf("ip:%s\n", p.ip)

   cmd := exec.Command("ping", p.ip)
   out, err := cmd.CombinedOutput()
   if err != nil {
      fmt.Printf("ping %s 失败, err:%s\n", p.ip, err)
      p.tong <- false
      return
   }
   output, err := simplifiedchinese.GBK.NewDecoder().Bytes(out)
   if err != nil {
      fmt.Printf("编码 %+v 失败, err:%s\n", out, err)
      p.tong <- false
      return
   }
   info := string(output)
   fmt.Printf("ping %s 成功, 返回信息:%s\n", p.ip, info)
   exist := strings.Contains(info, "TTL=")
   if !exist {
      p.tong <- false
      return
   }
   p.tong <- true
}

func main() {
   prex := "172.16.90."
   start := 10
   end := 30
   var pingers []pinger
   for i := start; i <= end; i++ {
      pingers=append(pingers,pinger{ip: fmt.Sprintf("%s%d",prex,i),tong: make(chan bool,1)})
   }
   for _,v:=range pingers{
      fmt.Printf("%s ===> %v\n",v.ip,v.tong)
   }
   for _,v:=range pingers{
      p:=v
      go p.ping()
   }
   for _,v:=range pingers{
      fmt.Printf("%s ===> %v\n",v.ip,<-v.tong)
   }
   fmt.Println("结束")
}

运行

image-20221010140945500

标签:wg,err,某段,ip,fmt,ping,Printf,go
From: https://www.cnblogs.com/rainbow-tan/p/16775533.html

相关文章

  • [Typescript] Tips: DeepPartial
    DeeppartialsareSUPERusefulandnotnativelysupportedbyTypeScript.Here,Iuseonetohelpwithmockinganentityina(imaginary)testfile. typeDee......
  • ZR NOIP二十连测
    Day1匹配把命题加强一下,那么就是\(n\)个数里面选\(n/2\)个正的,\(n/2\)个负的,求最大值,排序后贪心即可。狼人一个暴力\(\mathcalO(n^3)\)做法是对每一种颜色\(......
  • javascrip的日期
    <!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metahttp-equiv="X-UA-Compatible"content="IE=edge"><metaname="viewport"content......
  • yolov5部署到iPhone或终端实践全过程(论文源码福利)
    计算机视觉研究院专栏作者:Edison_G期待已久的检测经典又来来了一波强袭——yolov5。其实yolov5没有完整的文件,现在最重要的应该是把yolov4弄清楚,在目标检测领域中受益匪浅,可......
  • Eclipse将Maven项目打成jar包以及java用命令运行jar包指定类下的main方法
    Eclipse将项目打包成jar参考:https://javaforall.cn/151764.html      https://blog.csdn.net/xiaofengfeng_24/article/details/1252642531:在eclipse中选中项......
  • ETCD 未授权访问漏洞-添加iptables规则修复方法
    ⻛险提⽰1.在iptables规则配置正确的情况下,可以规避未认证的漏洞;2.如变更过程中误操作限制了其他端⼝的情况下可能会造成存储异常;影响版本所有版本问题描述:客⼾采......
  • Go_Channel详解
    一channel介绍单纯地将函数并发执行是没有意义的。函数与函数间需要交换数据才能体现并发执行函数的意义。虽然可以使用共享内存进行数据交换,但是共享内存在不同的gorou......
  • Go_IO操作
    1.输入输出的底层原理终端其实是一个文件,相关实例如下:os.Stdin:标准输入的文件实例,类型为*Fileos.Stdout:标准输出的文件实例,类型为*Fileos.Stderr:标准错误输出的文件实......
  • 37、linux下安装python3.6和django
    37.1、安装python:1、python介绍:python是一种面向对象的,解释型的计算机语言,它的特点是语法简介,优雅,简单易学。1989年诞生,Guido(龟叔)开发。编译型语言:代码在编译之后,编译成......
  • pip3 install requests Cannot open D:\Python35\Scripts\pip3-script.py
    1、问题描述:使用pip(或pip3)指令安装模块时,出现了CannotopenD:\Python35\Scripts\pip3-script.py的报错信息2、原因分析:pip安装出错3、解决方式:可以使用这条指令来......