/
iptools.rsc
64 lines (60 loc) · 1.56 KB
/
iptools.rsc
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
# :put [$ExtractIP ip="10.1.1.1"]
:global ExtractIP do={
:local ipaddr [:toip $ip]
if ([:typeof $ipaddr] = "ip") do={
:return [:tostr $ipaddr]
} else={
:global ExtractIPFromRange
:return [$ExtractIPFromRange ip=$ip]
}
}
# :put [$ExtractIPFromRange ip="10.1.1.1/24"]
:global ExtractIPFromRange do={
:local idpos [:find $ip "/"]
if ($idpos < 1) do={
:return "error not a subnet, too short"
}
if ($idpos > [:len $ip]) do={
:return "error not a subnet, too long"
}
:local extracted [:pick $ip 0 $idpos]
if ([:len $extracted] < 3) do={
:return ("error no subnet: " . $extracted)
} else={
:return $extracted
}
}
# :put [$ExtractPrefix ip="10.1.1.1/24"]
:global ExtractPrefix do={
:local idpos [:find $ip "/"]
if ($idpos >= [:len $ip]) do={
:return "error"
}
:local extracted [:pick $ip $idpos [len $ip]]
if ([:len $extracted] != 3) do={
:return "error"
} else={
:return $extracted
}
}
# :put [$VerifyRange ip="10.1.1.1/24"]
# maybe check valid ip and add "/32"
:global VerifyRange do={
:local iprange ([[:parse ":return $ip"]])
if ([:typeof $iprange] = "ip-prefix") do={
:return [:tostr $iprange]
} else={
:return "error"
}
}
# :put [$VerifyIP ip="10.1.1.1/24"]
# :put [$VerifyIP ip="10.1.1.1"]
:global VerifyIP do={
:local ipaddr [:toip $ip]
if ([:typeof $ipaddr] = "ip") do={
:return [:tostr $ipaddr]
} else={
:global VerifyRange
:return [$VerifyRange ip=$ip]
}
}