1
0
mirror of https://github.com/go-kratos/kratos.git synced 2025-02-05 13:15:11 +02:00

fix loopback addr

This commit is contained in:
longXboy 2021-05-31 16:55:30 +08:00
parent e1d6377542
commit f69cf59537
2 changed files with 4 additions and 12 deletions

View File

@ -5,18 +5,10 @@ import (
"strconv" "strconv"
) )
func isPrivateIP(addr string) bool { func isValidIP(addr string) bool {
ip := net.ParseIP(addr) ip := net.ParseIP(addr)
if ip4 := ip.To4(); ip4 != nil { if ip4 := ip.To4(); ip4 != nil {
// Following RFC 4193, Section 3. Local IPv6 Unicast Addresses which says: return !ip4.IsLoopback()
// The Internet Assigned Numbers Authority (IANA) has reserved the
// following three blocks of the IPv4 address space for private internets:
// 10.0.0.0 - 10.255.255.255 (10/8 prefix)
// 172.16.0.0 - 172.31.255.255 (172.16/12 prefix)
// 192.168.0.0 - 192.168.255.255 (192.168/16 prefix)
return ip4[0] == 10 ||
(ip4[0] == 172 && ip4[1]&0xf0 == 16) ||
(ip4[0] == 192 && ip4[1] == 168)
} }
// Following RFC 4193, Section 3. Private Address Space which says: // Following RFC 4193, Section 3. Private Address Space which says:
// The Internet Assigned Numbers Authority (IANA) has reserved the // The Internet Assigned Numbers Authority (IANA) has reserved the
@ -66,7 +58,7 @@ func Extract(hostPort string, lis net.Listener) (string, error) {
default: default:
continue continue
} }
if isPrivateIP(ip.String()) { if isValidIP(ip.String()) {
return net.JoinHostPort(ip.String(), port), nil return net.JoinHostPort(ip.String(), port), nil
} }
} }

View File

@ -38,7 +38,7 @@ func TestPrivateIP(t *testing.T) {
} }
for _, test := range tests { for _, test := range tests {
t.Run(test.addr, func(t *testing.T) { t.Run(test.addr, func(t *testing.T) {
res := isPrivateIP(test.addr) res := isValidIP(test.addr)
if res != test.expect { if res != test.expect {
t.Fatalf("expected %t got %t", test.expect, res) t.Fatalf("expected %t got %t", test.expect, res)
} }