-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmain.go
More file actions
143 lines (119 loc) · 2.49 KB
/
Copy pathmain.go
File metadata and controls
143 lines (119 loc) · 2.49 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
package main
import (
"bufio"
"flag"
"fmt"
"github.com/projectdiscovery/mapcidr"
"github.com/thinkeridea/go-extend/exnet"
"net"
"os"
"strings"
)
var filename = flag.String("in", "", "输入文件名")
var cidrSlice []string
var iprangeSlice []string
var wrongSlice []string
var ipv4Left = ""
var ipv4Right = ""
var numSlice []uint
func main() {
flag.Parse()
if *filename == "" {
*filename = "文件名不可为空!!!"
} else {
todo()
}
}
func todo() {
file, err := os.OpenFile(*filename, os.O_RDWR, 0666)
if err != nil {
fmt.Println("打开文件失败!", err)
return
}
defer file.Close()
buf1 := bufio.NewScanner(file)
for buf1.Scan() {
// cird
check1 := strings.Contains(buf1.Text(), "/")
// ip-range
check2 := strings.Contains(buf1.Text(), "-")
if check1 {
//fmt.Println(buf1.Text(), "cird")
cidrSlice = append(cidrSlice, buf1.Text())
} else if check2 {
//fmt.Println(buf1.Text(), "ip-range")
iprangeSlice = append(iprangeSlice, buf1.Text())
} else {
// 非预期格式
//fmt.Println(buf1.Text(), "wrong")
wrongSlice = append(wrongSlice, buf1.Text())
}
}
// 处理 ip-range 队列
iprange()
// 处理 cidr 队列
cidr()
// 处理非预期格式
if len(wrongSlice) > 0 {
fmt.Println("-----存在非预期格式-----")
wrong()
}
}
func iprange() {
for _, v := range iprangeSlice {
arr := strings.Split(v, "-")
if len(arr) == 2 {
ipv4Left = arr[0]
ipv4Right = arr[1]
// 左边地址
addressRight := net.ParseIP(ipv4Left)
// 右边地址
addressRight2 := net.ParseIP(ipv4Right)
if addressRight == nil {
// 格式非预期
wrongSlice = append(wrongSlice, v)
} else if addressRight2 == nil {
// 格式非预期
wrongSlice = append(wrongSlice, v)
} else {
// 转10进制
num1, _ := exnet.IPString2Long(ipv4Left)
num2, _ := exnet.IPString2Long(ipv4Right)
if num1 > num2 {
// 格式非预期
wrongSlice = append(wrongSlice, v)
} else {
// 循环自增
for {
// 添加进切片
numSlice = append(numSlice, num1)
if num1 == num2 {
break
}
num1 += 1
}
}
}
} else {
// 格式非预期
wrongSlice = append(wrongSlice, v)
}
}
for _, v := range numSlice {
s, _ := exnet.Long2IPString(v)
fmt.Println(s)
}
}
func cidr() {
for _, v := range cidrSlice {
ips, _ := mapcidr.IPAddresses(v)
for _, ip := range ips {
fmt.Println(ip)
}
}
}
func wrong() {
for _, v := range wrongSlice {
fmt.Println(v)
}
}