|
package common |
|
|
|
import ( |
|
"fmt" |
|
"math/rand" |
|
"net" |
|
"time" |
|
) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
var IP_RANGE = [][]string{ |
|
{"4.150.64.0", "4.150.127.255"}, |
|
{"4.152.0.0", "4.153.255.255"}, |
|
{"13.68.0.0", "13.68.127.255"}, |
|
{"13.104.216.0", "13.104.216.255"}, |
|
{"20.1.128.0", "20.1.255.255"}, |
|
{"20.7.0.0", "20.7.255.255"}, |
|
{"20.22.0.0", "20.22.255.255"}, |
|
{"40.84.0.0", "40.84.127.255"}, |
|
{"40.123.0.0", "40.123.127.255"}, |
|
{"4.214.0.0", "4.215.255.255"}, |
|
{"4.241.0.0", "4.241.255.255"}, |
|
{"40.115.128.0", "40.115.255.255"}, |
|
{"52.140.192.0", "52.140.255.255"}, |
|
{"104.41.160.0", "104.41.191.255"}, |
|
{"138.91.0.0", "138.91.15.255"}, |
|
{"151.206.65.0", "151.206.79.255"}, |
|
{"191.237.240.0", "191.237.241.255"}, |
|
{"4.208.0.0", "4.209.255.255"}, |
|
{"52.169.0.0", "52.169.255.255"}, |
|
{"68.219.0.0", "68.219.127.255"}, |
|
{"65.52.64.0", "65.52.79.255"}, |
|
{"98.71.0.0", "98.71.127.255"}, |
|
{"74.234.0.0", "74.234.127.255"}, |
|
{"4.151.0.0", "4.151.255.255"}, |
|
{"13.84.0.0", "13.85.255.255"}, |
|
{"4.255.128.0", "4.255.255.255"}, |
|
{"13.78.128.0", "13.78.255.255"}, |
|
{"4.175.0.0", "4.175.255.255"}, |
|
{"13.80.0.0", "13.81.255.255"}, |
|
{"20.73.0.0", "20.73.255.255"}, |
|
} |
|
|
|
|
|
func GetRandomIP() string { |
|
seed := time.Now().UnixNano() |
|
rng := rand.New(rand.NewSource(seed)) |
|
|
|
|
|
randomIndex := rng.Intn(len(IP_RANGE)) |
|
|
|
|
|
startIP := IP_RANGE[randomIndex][0] |
|
endIP := IP_RANGE[randomIndex][1] |
|
|
|
|
|
startIPInt := ipToUint32(net.ParseIP(startIP)) |
|
|
|
endIPInt := ipToUint32(net.ParseIP(endIP)) |
|
|
|
|
|
randomIPInt := rng.Uint32()%(endIPInt-startIPInt+1) + startIPInt |
|
randomIP := uint32ToIP(randomIPInt) |
|
|
|
return randomIP |
|
} |
|
|
|
|
|
func ipToUint32(ip net.IP) uint32 { |
|
ip = ip.To4() |
|
var result uint32 |
|
result += uint32(ip[0]) << 24 |
|
result += uint32(ip[1]) << 16 |
|
result += uint32(ip[2]) << 8 |
|
result += uint32(ip[3]) |
|
return result |
|
} |
|
|
|
|
|
func uint32ToIP(intIP uint32) string { |
|
ip := fmt.Sprintf("%d.%d.%d.%d", byte(intIP>>24), byte(intIP>>16), byte(intIP>>8), byte(intIP)) |
|
return ip |
|
} |
|
|