From f69cf595373e204f3454249f7f104e7b09463e3c Mon Sep 17 00:00:00 2001 From: longXboy Date: Mon, 31 May 2021 16:55:30 +0800 Subject: [PATCH] fix loopback addr --- internal/host/host.go | 14 +++----------- internal/host/host_test.go | 2 +- 2 files changed, 4 insertions(+), 12 deletions(-) diff --git a/internal/host/host.go b/internal/host/host.go index 7ab5823d5..ce092c07e 100644 --- a/internal/host/host.go +++ b/internal/host/host.go @@ -5,18 +5,10 @@ import ( "strconv" ) -func isPrivateIP(addr string) bool { +func isValidIP(addr string) bool { ip := net.ParseIP(addr) if ip4 := ip.To4(); ip4 != nil { - // Following RFC 4193, Section 3. Local IPv6 Unicast Addresses which says: - // 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) + return !ip4.IsLoopback() } // Following RFC 4193, Section 3. Private Address Space which says: // The Internet Assigned Numbers Authority (IANA) has reserved the @@ -66,7 +58,7 @@ func Extract(hostPort string, lis net.Listener) (string, error) { default: continue } - if isPrivateIP(ip.String()) { + if isValidIP(ip.String()) { return net.JoinHostPort(ip.String(), port), nil } } diff --git a/internal/host/host_test.go b/internal/host/host_test.go index bc7fdfb52..e3b6436e1 100644 --- a/internal/host/host_test.go +++ b/internal/host/host_test.go @@ -38,7 +38,7 @@ func TestPrivateIP(t *testing.T) { } for _, test := range tests { t.Run(test.addr, func(t *testing.T) { - res := isPrivateIP(test.addr) + res := isValidIP(test.addr) if res != test.expect { t.Fatalf("expected %t got %t", test.expect, res) }