IPRangeLoader.go 814 B

12345678910111213141516171819202122232425262728293031323334353637383940
  1. package main
  2. import (
  3. "bufio"
  4. "log"
  5. "net"
  6. "os"
  7. )
  8. func loadFirstIPOfRangeFromFile(ipFile string) []net.IPAddr {
  9. file, err := os.Open(ipFile)
  10. if err != nil {
  11. log.Fatal(err)
  12. }
  13. firstIPs := make([]net.IPAddr, 0)
  14. scanner := bufio.NewScanner(file)
  15. scanner.Split(bufio.ScanLines)
  16. for scanner.Scan() {
  17. IPString := scanner.Text()
  18. firstIP, IPRange, err := net.ParseCIDR(IPString)
  19. if err != nil {
  20. log.Fatal(err)
  21. }
  22. for IPRange.Contains(firstIP) {
  23. randipEndWith() // 随机 IP 的最后一段
  24. firstIP[15] = ipEndWith
  25. firstIPCopy := make([]byte, len(firstIP))
  26. copy(firstIPCopy, firstIP)
  27. firstIPs = append(firstIPs, net.IPAddr{IP: firstIPCopy})
  28. firstIP[14]++
  29. if firstIP[14] == 0 {
  30. firstIP[13]++
  31. if firstIP[13] == 0 {
  32. firstIP[12]++
  33. }
  34. }
  35. }
  36. }
  37. return firstIPs
  38. }