main.go 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. package main
  2. import (
  3. "encoding/csv"
  4. "fmt"
  5. "github.com/cheggaaa/pb/v3"
  6. "log"
  7. "os"
  8. "sync"
  9. )
  10. func ExportCsv(filePath string, data [][]string) {
  11. fp, err := os.Create(filePath)
  12. if err != nil {
  13. log.Fatalf("创建文件["+filePath+"]句柄失败,%v", err)
  14. return
  15. }
  16. defer fp.Close()
  17. w := csv.NewWriter(fp) //创建一个新的写入文件流
  18. w.WriteAll(data)
  19. w.Flush()
  20. }
  21. var pingTime int
  22. var pingRoutine int
  23. const ipEndWith uint8 = 1
  24. type progressEvent int
  25. const (
  26. NoAvailableIPFound progressEvent = iota
  27. AvailableIPFound
  28. NormalPing
  29. )
  30. func handleProgressGenerator(pb *pb.ProgressBar)func (e progressEvent){
  31. return func(e progressEvent) {
  32. switch e {
  33. case NoAvailableIPFound:
  34. pb.Add(pingTime)
  35. case AvailableIPFound:
  36. pb.Add(failTime)
  37. case NormalPing:
  38. pb.Increment()
  39. }
  40. }
  41. }
  42. func handleUserInput(){
  43. fmt.Println("请输入扫描协程数(数字越大越快,默认100):")
  44. fmt.Scanln(&pingRoutine)
  45. if pingRoutine<=0{
  46. pingRoutine=100
  47. }
  48. fmt.Println("请输入tcping次数(默认10):")
  49. fmt.Scanln(&pingTime)
  50. if pingTime<=0{
  51. pingTime=10
  52. }
  53. }
  54. func main(){
  55. handleUserInput()
  56. ips:=loadFirstIPOfRangeFromFile()
  57. pingCount:=len(ips)*pingTime
  58. bar := pb.StartNew(pingCount)
  59. var wg sync.WaitGroup
  60. var mu sync.Mutex
  61. var data = make([][]string,0)
  62. data = append(data,[]string{"IP Address","Ping received","Ping time"})
  63. control := make(chan bool,pingRoutine)
  64. for _,ip :=range ips{
  65. wg.Add(1)
  66. control<-false
  67. handleProgress:=handleProgressGenerator(bar)
  68. go tcpingGoroutine(&wg,&mu,ip,pingTime, &data,control,handleProgress)
  69. }
  70. wg.Wait()
  71. bar.Finish()
  72. ExportCsv("./result.csv",data)
  73. }