main.go 1.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. package main
  2. import (
  3. "fmt"
  4. "github.com/cheggaaa/pb/v3"
  5. "sort"
  6. "sync"
  7. "time"
  8. )
  9. func handleUserInput() {
  10. fmt.Println("请输入扫描协程数(数字越大越快,默认400):")
  11. fmt.Scanln(&pingRoutine)
  12. if pingRoutine <= 0 {
  13. pingRoutine = 400
  14. }
  15. fmt.Println("请输入tcping次数(默认10):")
  16. fmt.Scanln(&pingTime)
  17. if pingTime <= 0 {
  18. pingTime = 10
  19. }
  20. fmt.Println("请输入要测试的下载节点个数(默认10):")
  21. fmt.Scanln(&downloadTestCount)
  22. if downloadTestCount <= 0 {
  23. downloadTestCount = 10
  24. }
  25. fmt.Println("请输入下载测试时间(默认10,单位为秒):")
  26. var downloadSecond int64
  27. fmt.Scanln(&downloadSecond)
  28. if downloadSecond <= 0 {
  29. downloadSecond = 10
  30. }
  31. downloadTestTime = time.Duration(downloadSecond) * time.Second
  32. }
  33. func main() {
  34. initipEndWith()
  35. handleUserInput()
  36. ips := loadFirstIPOfRangeFromFile()
  37. pingCount := len(ips) * pingTime
  38. bar := pb.StartNew(pingCount)
  39. var wg sync.WaitGroup
  40. var mu sync.Mutex
  41. var data = make([]CloudflareIPData, 0)
  42. fmt.Println("开始tcping")
  43. control := make(chan bool, pingRoutine)
  44. for _, ip := range ips {
  45. wg.Add(1)
  46. control <- false
  47. handleProgress := handleProgressGenerator(bar)
  48. go tcpingGoroutine(&wg, &mu, ip, pingTime, &data, control, handleProgress)
  49. }
  50. wg.Wait()
  51. bar.Finish()
  52. bar = pb.StartNew(downloadTestCount)
  53. sort.Sort(CloudflareIPDataSet(data))
  54. fmt.Println("开始下载测速")
  55. for i := 0; i < downloadTestCount; i++ {
  56. _, speed := DownloadSpeedHandler(data[i].ip)
  57. data[i].downloadSpeed = speed
  58. bar.Add(1)
  59. }
  60. bar.Finish()
  61. ExportCsv("./result.csv", data)
  62. }