From 9040b4c2842f880576312bc065c775c8f7dda7c4 Mon Sep 17 00:00:00 2001 From: dipingxian2 <39109351+dipingxian2@users.noreply.github.com> Date: Sat, 26 Jan 2019 16:53:05 +0800 Subject: [PATCH 1/5] Update urlv4.go Add "net.LookupIP()" function to support hostname when we add enode by hostname:port --- p2p/enode/urlv4.go | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/p2p/enode/urlv4.go b/p2p/enode/urlv4.go index 50e9485d04c4..c155414d9268 100644 --- a/p2p/enode/urlv4.go +++ b/p2p/enode/urlv4.go @@ -124,7 +124,13 @@ func parseComplete(rawurl string) (*Node, error) { return nil, fmt.Errorf("invalid host: %v", err) } if ip = net.ParseIP(host); ip == nil { - return nil, errors.New("invalid IP address") + // attempt to look up IP addresses if host is a FQDN + lookupIPs, err := net.LookupIP(host) + if err != nil { + return nil, errors.New("invalid IP address") + } + // set to first ip by default + ip = lookupIPs[0] } // Ensure the IP is 4 bytes long for IPv4 addresses. if ipv4 := ip.To4(); ipv4 != nil { From 7a21dc126562383ed11190188a175e0baaa1458b Mon Sep 17 00:00:00 2001 From: Felix Lange Date: Thu, 22 Aug 2019 11:18:18 +0200 Subject: [PATCH 2/5] p2p/enode: simplify parseComplete --- p2p/enode/urlv4.go | 16 ++++------------ 1 file changed, 4 insertions(+), 12 deletions(-) diff --git a/p2p/enode/urlv4.go b/p2p/enode/urlv4.go index c155414d9268..707cf1632574 100644 --- a/p2p/enode/urlv4.go +++ b/p2p/enode/urlv4.go @@ -119,25 +119,17 @@ func parseComplete(rawurl string) (*Node, error) { return nil, fmt.Errorf("invalid node ID (%v)", err) } // Parse the IP address. - host, port, err := net.SplitHostPort(u.Host) + ips, err := net.LookupIP(u.Hostname()) if err != nil { - return nil, fmt.Errorf("invalid host: %v", err) - } - if ip = net.ParseIP(host); ip == nil { - // attempt to look up IP addresses if host is a FQDN - lookupIPs, err := net.LookupIP(host) - if err != nil { - return nil, errors.New("invalid IP address") - } - // set to first ip by default - ip = lookupIPs[0] + return nil, err } + ip := ips[0] // Ensure the IP is 4 bytes long for IPv4 addresses. if ipv4 := ip.To4(); ipv4 != nil { ip = ipv4 } // Parse the port numbers. - if tcpPort, err = strconv.ParseUint(port, 10, 16); err != nil { + if tcpPort, err = strconv.ParseUint(u.Port(), 10, 16); err != nil { return nil, errors.New("invalid port") } udpPort = tcpPort From 7183ff2cdcfc768e6ac7f2131f87773994c4e76e Mon Sep 17 00:00:00 2001 From: Felix Lange Date: Thu, 22 Aug 2019 11:28:18 +0200 Subject: [PATCH 3/5] p2p/enode: fix lint issue --- p2p/enode/urlv4.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/p2p/enode/urlv4.go b/p2p/enode/urlv4.go index 630a820cf333..a9a3d1374e51 100644 --- a/p2p/enode/urlv4.go +++ b/p2p/enode/urlv4.go @@ -129,7 +129,7 @@ func parseComplete(rawurl string) (*Node, error) { if err != nil { return nil, err } - ip := ips[0] + ip = ips[0] // Ensure the IP is 4 bytes long for IPv4 addresses. if ipv4 := ip.To4(); ipv4 != nil { ip = ipv4 From 86185a4f9af82ac8de9e6dbad2c85a257381a4ac Mon Sep 17 00:00:00 2001 From: Felix Lange Date: Thu, 22 Aug 2019 13:06:50 +0200 Subject: [PATCH 4/5] p2p/enode: fix test --- p2p/enode/urlv4_test.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/p2p/enode/urlv4_test.go b/p2p/enode/urlv4_test.go index 12399d291c1d..b443186e370e 100644 --- a/p2p/enode/urlv4_test.go +++ b/p2p/enode/urlv4_test.go @@ -61,8 +61,8 @@ var parseNodeTests = []struct { }, // Complete node URLs with IP address and ports { - input: "enode://1dd9d65c4552b5eb43d5ad55a2ee3f56c6cbc1c64a5c8d659f51fcd51bace24351232b8d7821617d2b29b54b81cdefb9b3e9c37d7fd5f63270bcc9e1a6f6a439@hostname:3", - wantError: `invalid IP address`, + input: "enode://1dd9d65c4552b5eb43d5ad55a2ee3f56c6cbc1c64a5c8d659f51fcd51bace24351232b8d7821617d2b29b54b81cdefb9b3e9c37d7fd5f63270bcc9e1a6f6a439@invalid.:3", + wantError: `lookup invalid.: no such host`, }, { input: "enode://1dd9d65c4552b5eb43d5ad55a2ee3f56c6cbc1c64a5c8d659f51fcd51bace24351232b8d7821617d2b29b54b81cdefb9b3e9c37d7fd5f63270bcc9e1a6f6a439@127.0.0.1:foo", @@ -76,7 +76,7 @@ var parseNodeTests = []struct { input: "enode://1dd9d65c4552b5eb43d5ad55a2ee3f56c6cbc1c64a5c8d659f51fcd51bace24351232b8d7821617d2b29b54b81cdefb9b3e9c37d7fd5f63270bcc9e1a6f6a439@127.0.0.1:52150", wantResult: NewV4( hexPubkey("1dd9d65c4552b5eb43d5ad55a2ee3f56c6cbc1c64a5c8d659f51fcd51bace24351232b8d7821617d2b29b54b81cdefb9b3e9c37d7fd5f63270bcc9e1a6f6a439"), - net.IP{0x7f, 0x0, 0x0, 0x1}, + net.IP{127, 0, 0, 1}, 52150, 52150, ), From c68327b524c411458412aa18cc75a4ab649b4903 Mon Sep 17 00:00:00 2001 From: Felix Lange Date: Thu, 22 Aug 2019 13:53:28 +0200 Subject: [PATCH 5/5] p2p/enode: fix test on Travis, too --- p2p/enode/urlv4_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/p2p/enode/urlv4_test.go b/p2p/enode/urlv4_test.go index b443186e370e..41a88eec61fb 100644 --- a/p2p/enode/urlv4_test.go +++ b/p2p/enode/urlv4_test.go @@ -62,7 +62,7 @@ var parseNodeTests = []struct { // Complete node URLs with IP address and ports { input: "enode://1dd9d65c4552b5eb43d5ad55a2ee3f56c6cbc1c64a5c8d659f51fcd51bace24351232b8d7821617d2b29b54b81cdefb9b3e9c37d7fd5f63270bcc9e1a6f6a439@invalid.:3", - wantError: `lookup invalid.: no such host`, + wantError: `no such host`, }, { input: "enode://1dd9d65c4552b5eb43d5ad55a2ee3f56c6cbc1c64a5c8d659f51fcd51bace24351232b8d7821617d2b29b54b81cdefb9b3e9c37d7fd5f63270bcc9e1a6f6a439@127.0.0.1:foo",