|
@@ -14,8 +14,6 @@ import (
|
|
|
const defaultInputFile = "ip.txt"
|
|
|
|
|
|
var (
|
|
|
- // IPv6 IP version is 6
|
|
|
- IPv6 = false
|
|
|
// TestAll test all ip
|
|
|
TestAll = false
|
|
|
// IPFile is the filename of IP Rangs
|
|
@@ -26,6 +24,10 @@ func InitRandSeed() {
|
|
|
rand.Seed(time.Now().UnixNano())
|
|
|
}
|
|
|
|
|
|
+func isIPv4(ip string) bool {
|
|
|
+ return strings.Contains(ip, ".")
|
|
|
+}
|
|
|
+
|
|
|
func randIPEndWith(num byte) byte {
|
|
|
if num == 0 { // 对于 /32 这种单独的 IP
|
|
|
return byte(0)
|
|
@@ -49,8 +51,9 @@ func newIPRanges() *IPRanges {
|
|
|
func (r *IPRanges) fixIP(ip string) string {
|
|
|
// 如果不含有 '/' 则代表不是 IP 段,而是一个单独的 IP,因此需要加上 /32 /128 子网掩码
|
|
|
if i := strings.IndexByte(ip, '/'); i < 0 {
|
|
|
- r.mask = "/32"
|
|
|
- if IPv6 {
|
|
|
+ if isIPv4(ip) {
|
|
|
+ r.mask = "/32"
|
|
|
+ } else {
|
|
|
r.mask = "/128"
|
|
|
}
|
|
|
ip += r.mask
|
|
@@ -116,8 +119,6 @@ func (r *IPRanges) chooseIPv4() {
|
|
|
func (r *IPRanges) chooseIPv6() {
|
|
|
var tempIP uint8
|
|
|
for r.ipNet.Contains(r.firstIP) {
|
|
|
- //fmt.Println(firstIP)
|
|
|
- //fmt.Println(firstIP[0], firstIP[1], firstIP[2], firstIP[3], firstIP[4], firstIP[5], firstIP[6], firstIP[7], firstIP[8], firstIP[9], firstIP[10], firstIP[11], firstIP[12], firstIP[13], firstIP[14], firstIP[15])
|
|
|
if r.mask != "/128" {
|
|
|
r.firstIP[15] = randIPEndWith(255) // 随机 IP 的最后一段
|
|
|
r.firstIP[14] = randIPEndWith(255) // 随机 IP 的最后一段
|
|
@@ -148,11 +149,11 @@ func loadIPRanges() []*net.IPAddr {
|
|
|
scanner := bufio.NewScanner(file)
|
|
|
for scanner.Scan() {
|
|
|
ranges.parseCIDR(scanner.Text())
|
|
|
- if IPv6 {
|
|
|
+ if isIPv4(scanner.Text()) {
|
|
|
+ ranges.chooseIPv4()
|
|
|
+ } else {
|
|
|
ranges.chooseIPv6()
|
|
|
- continue
|
|
|
}
|
|
|
- ranges.chooseIPv4()
|
|
|
}
|
|
|
return ranges.ips
|
|
|
}
|