262 lines
11 KiB
Go

package common
import (
"fmt"
"math/rand"
"net"
"time"
)
// 使用真实有效的美国ip
// https://lite.ip2location.com/united-states-of-america-ip-address-ranges
// https://cdn-lite.ip2location.com/datasets/US.json?_=1683336720620
//
// async function getIpRange() {
// const results = await fetch(`https://cdn-lite.ip2location.com/datasets/US.json?_=${Date.now()}`)
// .then((res) => res.json())
// .then((res) => {
// const limitCount = 10000;
// return res.data.filter((x) => parseInt(x[2].replace(/,/g,'')) >= limitCount).map((x) => `{"${x[0]}", "${x[1]}"}, //${x[2]}`);
// });
// console.log(`results : `,results);
// return results.join('\n');
// }
//
// copy(await getIpRange());
var IP_RANGE = [][]string{
{"3.2.50.0", "3.5.31.255"}, //192,000
{"3.5.74.0", "3.5.133.255"}, //15,360
{"3.12.0.0", "3.23.255.255"}, //786,432
{"3.30.0.0", "3.33.34.255"}, //205,568
{"3.33.36.0", "3.33.255.255"}, //56,320
{"3.40.0.0", "3.63.255.255"}, //1,572,864
{"3.80.0.0", "3.95.255.255"}, //1,048,576
{"3.100.0.0", "3.103.255.255"}, //262,144
{"3.116.0.0", "3.119.255.255"}, //262,144
{"3.128.0.0", "3.247.255.255"}, //7,864,320
{"4.0.0.0", "4.1.179.255"}, //111,616
{"4.1.181.0", "4.14.241.255"}, //867,584
{"4.15.21.0", "4.16.47.255"}, //72,448
{"4.16.55.0", "4.18.65.255"}, //133,888
{"4.18.68.0", "4.28.135.255"}, //672,768
{"4.28.139.0", "4.31.207.255"}, //214,272
{"4.31.209.0", "4.33.203.255"}, //129,792
{"4.33.234.0", "4.37.0.255"}, //202,496
{"4.37.2.0", "4.42.31.255"}, //335,360
{"4.42.35.0", "4.55.87.255"}, //865,536
{"4.55.95.0", "4.59.175.255"}, //282,880
{"4.59.179.0", "4.71.152.255"}, //779,776
{"4.71.154.0", "4.143.255.255"}, //4,744,704
{"4.148.0.0", "4.157.255.255"}, //655,360
{"4.184.0.0", "4.184.55.255"}, //14,336
{"4.198.160.0", "4.198.255.255"}, //24,576
{"4.203.96.0", "4.203.255.255"}, //40,960
{"4.227.0.0", "4.227.255.255"}, //65,536
{"4.232.200.0", "4.232.255.255"}, //14,336
{"4.236.0.0", "4.236.255.255"}, //65,536
{"4.242.0.0", "4.242.255.255"}, //65,536
{"4.246.0.0", "4.246.255.255"}, //65,536
{"4.248.128.0", "4.249.255.255"}, //98,304
{"4.255.0.0", "4.255.255.255"}, //65,536
{"5.78.0.0", "5.78.255.255"}, //65,536
{"5.153.23.0", "5.153.63.255"}, //10,496
{"6.0.0.0", "8.3.111.255"}, //33,779,712
{"8.3.128.0", "8.5.250.255"}, //162,560
{"8.5.252.0", "8.7.243.255"}, //129,024
{"8.7.245.0", "8.10.5.255"}, //135,424
{"8.10.8.0", "8.14.121.255"}, //291,328
{"8.14.123.0", "8.14.196.255"}, //18,944
{"8.15.0.0", "8.17.204.255"}, //183,552
{"8.17.207.0", "8.18.49.255"}, //25,344
{"8.18.51.0", "8.18.112.255"}, //15,872
{"8.18.197.0", "8.19.7.255"}, //17,152
{"8.19.9.0", "8.20.99.255"}, //88,832
{"8.20.128.0", "8.20.252.255"}, //32,000
{"8.21.42.0", "8.21.109.255"}, //17,408
{"8.21.112.0", "8.22.175.255"}, //81,920
{"8.22.177.0", "8.23.138.255"}, //55,808
{"8.23.140.0", "8.23.239.255"}, //25,600
{"8.24.16.0", "8.24.241.255"}, //57,856
{"8.24.245.0", "8.25.95.255"}, //27,392
{"8.25.99.0", "8.25.248.255"}, //38,400
{"8.25.250.0", "8.26.93.255"}, //25,600
{"8.26.95.0", "8.26.175.255"}, //20,736
{"8.26.181.0", "8.27.63.255"}, //35,584
{"8.27.80.0", "8.28.3.255"}, //46,080
{"8.28.21.0", "8.28.81.255"}, //15,616
{"8.28.83.0", "8.28.126.255"}, //11,264
{"8.28.128.0", "8.28.200.255"}, //18,688
{"8.28.214.0", "8.29.104.255"}, //37,632
{"8.29.106.0", "8.29.223.255"}, //30,208
{"8.29.225.0", "8.30.207.255"}, //61,184
{"8.30.235.0", "8.33.95.255"}, //161,024
{"8.33.138.0", "8.34.68.255"}, //47,872
{"8.34.72.0", "8.34.145.255"}, //18,944
{"8.34.147.0", "8.34.199.255"}, //13,568
{"8.34.224.0", "8.35.56.255"}, //22,784
{"8.35.60.0", "8.35.148.255"}, //22,784
{"8.35.150.0", "8.35.210.255"}, //15,616
{"8.35.212.0", "8.36.76.255"}, //30,976
{"8.36.78.0", "8.36.129.255"}, //13,312
{"8.36.131.0", "8.36.215.255"}, //21,760
{"8.36.221.0", "8.37.40.255"}, //19,456
{"8.37.44.0", "8.38.146.255"}, //91,904
{"8.38.173.0", "8.39.5.255"}, //22,784
{"8.39.19.0", "8.39.124.255"}, //27,136
{"8.39.145.0", "8.39.200.255"}, //14,336
{"8.39.216.0", "8.40.25.255"}, //16,896
{"8.40.32.0", "8.40.106.255"}, //19,200
{"8.40.141.0", "8.41.4.255"}, //30,720
{"8.41.40.0", "8.42.7.255"}, //57,344
{"8.42.9.0", "8.42.50.255"}, //10,752
{"8.42.56.0", "8.42.160.255"}, //26,880
{"8.42.173.0", "8.42.244.255"}, //18,432
{"8.42.246.0", "8.43.120.255"}, //33,536
{"8.43.124.0", "8.43.223.255"}, //25,600
{"8.44.7.0", "8.44.57.255"}, //13,056
{"8.44.93.0", "8.45.95.255"}, //66,304
{"8.45.97.0", "8.46.112.255"}, //69,632
{"8.46.119.0", "8.47.68.255"}, //52,736
{"8.47.70.0", "8.49.215.255"}, //168,448
{"8.49.217.0", "8.50.11.255"}, //13,056
{"8.50.21.0", "8.51.0.255"}, //60,416
{"8.51.64.0", "8.127.255.255"}, //5,029,888
{"8.192.0.0", "8.192.108.255"}, //27,904
{"8.192.110.0", "8.207.255.255"}, //1,020,416
{"8.221.0.0", "8.221.127.255"}, //32,768
{"8.224.0.0", "8.238.42.255"}, //928,512
{"8.238.53.0", "8.238.142.255"}, //23,040
{"8.238.205.0", "8.241.255.255"}, //209,664
{"8.244.80.0", "8.244.130.255"}, //13,056
{"8.244.132.0", "8.244.255.255"}, //31,744
{"8.245.64.0", "8.245.127.255"}, //16,384
{"8.245.160.0", "8.245.255.255"}, //24,576
{"8.246.139.0", "8.246.191.255"}, //13,568
{"8.246.201.0", "9.9.8.255"}, //1,196,032
{"9.9.10.0", "9.255.255.255"}, //16,184,832
{"11.0.0.0", "11.210.23.255"}, //13,768,704
{"11.210.25.0", "12.5.185.255"}, //3,383,552
{"12.5.188.0", "12.19.87.255"}, //891,904
{"12.19.96.0", "12.24.140.255"}, //339,200
{"12.24.142.0", "12.35.147.255"}, //722,432
{"12.35.149.0", "12.41.127.255"}, //387,840
{"12.41.136.0", "12.46.103.255"}, //319,488
{"12.46.106.0", "12.129.111.255"}, //5,441,024
{"12.129.113.0", "12.139.119.255"}, //657,152
{"12.139.121.0", "12.144.81.255"}, //317,696
{"12.144.88.0", "12.159.147.255"}, //998,400
{"12.159.152.0", "12.174.223.255"}, //1,001,472
{"12.175.0.0", "12.184.30.255"}, //597,760
{"12.184.32.0", "12.192.62.255"}, //532,224
{"12.192.64.0", "12.196.47.255"}, //258,048
{"12.196.63.0", "12.204.9.255"}, //510,720
{"12.204.16.0", "12.206.179.255"}, //173,056
{"12.206.184.0", "12.208.168.255"}, //127,232
{"12.208.172.0", "13.32.0.255"}, //5,199,104
{"13.32.176.0", "13.32.215.255"}, //10,240
{"13.34.93.0", "13.34.255.255"}, //41,728
{"13.35.73.0", "13.35.127.255"}, //14,080
{"13.44.0.0", "13.47.255.255"}, //262,144
{"13.52.0.0", "13.52.255.255"}, //65,536
{"13.56.0.0", "13.66.255.255"}, //720,896
{"13.67.128.0", "13.68.255.255"}, //98,304
{"13.71.192.0", "13.72.191.255"}, //65,536
{"13.73.32.0", "13.73.95.255"}, //16,384
{"13.77.64.0", "13.77.255.255"}, //49,152
{"13.78.128.0", "13.78.255.255"}, //32,768
{"13.82.0.0", "13.86.255.255"}, //327,680
{"13.87.127.0", "13.88.199.255"}, //84,224
{"13.89.0.0", "13.92.255.255"}, //262,144
{"13.93.128.0", "13.93.255.255"}, //32,768
{"13.96.0.0", "13.103.255.255"}, //524,288
{"13.104.1.0", "13.104.41.255"}, //10,496
{"13.105.204.0", "13.105.255.255"}, //13,312
{"13.107.55.0", "13.107.136.255"}, //20,992
{"13.107.141.0", "13.107.197.255"}, //14,592
{"13.107.255.0", "13.111.255.255"}, //262,400
{"13.116.0.0", "13.120.63.255"}, //278,528
{"13.120.128.0", "13.121.64.255"}, //49,408
{"13.121.128.0", "13.122.63.255"}, //49,152
{"13.122.128.0", "13.123.255.255"}, //98,304
{"13.128.0.0", "13.199.255.255"}, //4,718,592
{"13.216.0.0", "13.224.15.255"}, //528,384
{"13.226.9.0", "13.226.56.255"}, //12,288
{"13.226.176.0", "13.226.243.255"}, //17,408
{"13.240.0.0", "13.243.255.255"}, //262,144
{"13.248.128.0", "13.248.255.255"}, //32,768
{"13.249.34.0", "13.249.143.255"}, //28,160
{"13.249.176.0", "13.249.240.255"}, //16,640
{"13.252.0.0", "13.255.255.255"}, //262,144
{"15.0.0.0", "15.106.75.255"}, //6,966,272
{"15.106.77.0", "15.109.211.255"}, //231,168
{"15.109.213.0", "15.113.77.255"}, //227,584
{"15.113.79.0", "15.114.96.255"}, //70,144
{"15.114.98.0", "15.118.101.255"}, //263,168
{"15.118.103.0", "15.119.207.255"}, //92,416
{"15.119.209.0", "15.122.23.255"}, //149,248
{"15.122.25.0", "15.124.124.255"}, //156,672
{"15.124.128.0", "15.127.94.255"}, //188,160
{"15.127.98.0", "15.145.19.255"}, //1,159,680
{"15.145.24.0", "15.151.255.255"}, //452,608
{"15.153.0.0", "15.155.255.255"}, //196,608
{"15.158.192.0", "15.159.255.255"}, //81,920
{"15.162.0.0", "15.163.255.255"}, //131,072
{"15.166.0.0", "15.167.255.255"}, //131,072
{"15.169.0.0", "15.177.23.255"}, //530,432
{"15.177.101.0", "15.183.255.255"}, //432,896
{"15.186.0.0", "15.187.255.255"}, //131,072
{"15.189.0.0", "15.189.255.255"}, //65,536
{"15.190.64.0", "15.192.255.255"}, //180,224
{"15.193.11.0", "15.195.184.255"}, //175,616
{"15.195.186.0", "15.205.255.255"}, //673,280
{"15.208.0.0", "15.219.200.255"}, //772,352
{"15.219.202.0", "15.220.43.255"}, //25,088
{"15.221.54.0", "15.221.127.255"}, //18,944
{"15.221.153.0", "15.221.255.255"}, //26,368
{"15.224.0.0", "15.227.255.255"}, //262,144
{"15.231.0.0", "15.234.255.255"}, //262,144
{"15.238.0.0", "15.247.255.255"}, //655,360
{"15.248.72.0", "16.0.89.255"}, //528,896
}
// 获取真实有效的随机IP
func GetRandomIP() string {
seed := time.Now().UnixNano()
rng := rand.New(rand.NewSource(seed))
// 生成随机索引
randomIndex := rng.Intn(len(IP_RANGE))
// 获取随机 IP 地址范围
startIP := IP_RANGE[randomIndex][0]
endIP := IP_RANGE[randomIndex][1]
// 将起始 IP 地址转换为整数形式
startIPInt := ipToUint32(net.ParseIP(startIP))
// 将结束 IP 地址转换为整数形式
endIPInt := ipToUint32(net.ParseIP(endIP))
// 生成随机 IP 地址
randomIPInt := rng.Uint32()%(endIPInt-startIPInt+1) + startIPInt
randomIP := uint32ToIP(randomIPInt)
return randomIP
}
// 将 IP 地址转换为 uint32
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
}
// 将 uint32 转换为 IP 地址
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
}