Skip to content

Commit 2f8d053

Browse files
authored
feat: fix IsAbroadIp() to return false for intranet IPs (#100)
1 parent 208e418 commit 2f8d053

File tree

2 files changed

+31
-2
lines changed

2 files changed

+31
-2
lines changed

ip/ip.go

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,11 @@
1414

1515
package ip
1616

17-
import "fmt"
17+
import (
18+
"fmt"
19+
20+
"github.com/casbin/caswaf/util"
21+
)
1822

1923
func InitIpDb() {
2024
err := Init("ip/17monipdb.dat")
@@ -24,6 +28,11 @@ func InitIpDb() {
2428
}
2529

2630
func IsAbroadIp(ip string) bool {
31+
// If it's an intranet IP, it's not abroad
32+
if util.IsIntranetIp(ip) {
33+
return false
34+
}
35+
2736
info, err := Find(ip)
2837
if err != nil {
2938
fmt.Printf("error: ip = %s, error = %s\n", ip, err.Error())

util/network.go

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,10 @@
1414

1515
package util
1616

17-
import "os"
17+
import (
18+
"net"
19+
"os"
20+
)
1821

1922
var hostname = ""
2023

@@ -30,3 +33,20 @@ func init() {
3033
func GetHostname() string {
3134
return hostname
3235
}
36+
37+
func IsIntranetIp(ip string) bool {
38+
ipStr, _, err := net.SplitHostPort(ip)
39+
if err != nil {
40+
ipStr = ip
41+
}
42+
43+
parsedIP := net.ParseIP(ipStr)
44+
if parsedIP == nil {
45+
return false
46+
}
47+
48+
return parsedIP.IsPrivate() ||
49+
parsedIP.IsLoopback() ||
50+
parsedIP.IsLinkLocalUnicast() ||
51+
parsedIP.IsLinkLocalMulticast()
52+
}

0 commit comments

Comments
 (0)