mirror of https://github.com/dnomd343/XProxy.git
dnomd343
2 years ago
1 changed files with 53 additions and 0 deletions
@ -0,0 +1,53 @@ |
|||||
|
package main |
||||
|
|
||||
|
import ( |
||||
|
"fmt" |
||||
|
"net" |
||||
|
"strconv" |
||||
|
"strings" |
||||
|
) |
||||
|
|
||||
|
func isIP(ipAddr string, isRange bool, allowEmpty bool, ipLength int, ipFlag string) bool { |
||||
|
var address string |
||||
|
if allowEmpty && ipAddr == "" { // empty case
|
||||
|
return true |
||||
|
} |
||||
|
if isRange { |
||||
|
temp := strings.Split(ipAddr, "/") |
||||
|
if len(temp) != 2 { // not {IP_ADDRESS}/{LENGTH} format
|
||||
|
return false |
||||
|
} |
||||
|
length, err := strconv.Atoi(temp[1]) |
||||
|
if err != nil { // range length not a integer
|
||||
|
return false |
||||
|
} |
||||
|
if length < 0 || length > ipLength { // length should between 0 ~ ipLength
|
||||
|
return false |
||||
|
} |
||||
|
address = temp[0] |
||||
|
} else { |
||||
|
address = ipAddr |
||||
|
} |
||||
|
ip := net.ParseIP(address) // try to convert ip
|
||||
|
return ip != nil && strings.Contains(address, ipFlag) |
||||
|
} |
||||
|
|
||||
|
func isIPv4(ipAddr string, isRange bool, allowEmpty bool) bool { |
||||
|
return isIP(ipAddr, isRange, allowEmpty, 32, ".") |
||||
|
} |
||||
|
|
||||
|
func isIPv6(ipAddr string, isRange bool, allowEmpty bool) bool { |
||||
|
return isIP(ipAddr, isRange, allowEmpty, 128, ":") |
||||
|
} |
||||
|
|
||||
|
func main() { |
||||
|
fmt.Println("XProxy") |
||||
|
|
||||
|
fmt.Println(isIPv4("1.1.1.1", false, false)) |
||||
|
fmt.Println(isIPv4("1.1.1.1/24", true, false)) |
||||
|
fmt.Println(isIPv4("", true, true)) |
||||
|
fmt.Println(isIPv4("::1", true, true)) |
||||
|
fmt.Println(isIPv6("::1", true, true)) |
||||
|
fmt.Println(isIPv6("::1/32", true, true)) |
||||
|
fmt.Println(isIPv6("::1", true, true)) |
||||
|
} |
Loading…
Reference in new issue