| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879 |
- package main
- import (
- "encoding/csv"
- "fmt"
- "github.com/cheggaaa/pb/v3"
- "log"
- "os"
- "sync"
- )
- func ExportCsv(filePath string, data [][]string) {
- fp, err := os.Create(filePath)
- if err != nil {
- log.Fatalf("创建文件["+filePath+"]句柄失败,%v", err)
- return
- }
- defer fp.Close()
- w := csv.NewWriter(fp) //创建一个新的写入文件流
- w.WriteAll(data)
- w.Flush()
- }
- var pingTime int
- var pingRoutine int
- const ipEndWith uint8 = 1
- type progressEvent int
- const (
- NoAvailableIPFound progressEvent = iota
- AvailableIPFound
- NormalPing
- )
- func handleProgressGenerator(pb *pb.ProgressBar)func (e progressEvent){
- return func(e progressEvent) {
- switch e {
- case NoAvailableIPFound:
- pb.Add(pingTime)
- case AvailableIPFound:
- pb.Add(failTime)
- case NormalPing:
- pb.Increment()
- }
- }
- }
- func handleUserInput(){
- fmt.Println("请输入扫描协程数(数字越大越快,默认100):")
- fmt.Scanln(&pingRoutine)
- if pingRoutine<=0{
- pingRoutine=100
- }
- fmt.Println("请输入tcping次数(默认10):")
- fmt.Scanln(&pingTime)
- if pingTime<=0{
- pingTime=10
- }
- }
- func main(){
- handleUserInput()
- ips:=loadFirstIPOfRangeFromFile()
- pingCount:=len(ips)*pingTime
- bar := pb.StartNew(pingCount)
- var wg sync.WaitGroup
- var mu sync.Mutex
- var data = make([][]string,0)
- data = append(data,[]string{"IP Address","Ping received","Ping time"})
- control := make(chan bool,pingRoutine)
- for _,ip :=range ips{
- wg.Add(1)
- control<-false
- handleProgress:=handleProgressGenerator(bar)
- go tcpingGoroutine(&wg,&mu,ip,pingTime, &data,control,handleProgress)
- }
- wg.Wait()
- bar.Finish()
- ExportCsv("./result.csv",data)
- }
|