aboutsummaryrefslogtreecommitdiffstats
path: root/p2p
diff options
context:
space:
mode:
authoralexwang <39109351+dipingxian2@users.noreply.github.com>2019-08-22 20:23:40 +0800
committerFelix Lange <fjl@twurst.com>2019-08-22 20:23:40 +0800
commitb90cdbaa79cfe438aab0f1389d35980f3d38ec84 (patch)
treefae0203c414d6e2bd628cf53dcebf33df5b8d6af /p2p
parent4d358b9fc022da8f9085c3276a65fd3cd68a2b9d (diff)
downloadgo-tangerine-b90cdbaa79cfe438aab0f1389d35980f3d38ec84.tar
go-tangerine-b90cdbaa79cfe438aab0f1389d35980f3d38ec84.tar.gz
go-tangerine-b90cdbaa79cfe438aab0f1389d35980f3d38ec84.tar.bz2
go-tangerine-b90cdbaa79cfe438aab0f1389d35980f3d38ec84.tar.lz
go-tangerine-b90cdbaa79cfe438aab0f1389d35980f3d38ec84.tar.xz
go-tangerine-b90cdbaa79cfe438aab0f1389d35980f3d38ec84.tar.zst
go-tangerine-b90cdbaa79cfe438aab0f1389d35980f3d38ec84.zip
p2p/enode: allow DNS names in enode URLs (#18524)
Diffstat (limited to 'p2p')
-rw-r--r--p2p/enode/urlv4.go12
-rw-r--r--p2p/enode/urlv4_test.go6
2 files changed, 10 insertions, 8 deletions
diff --git a/p2p/enode/urlv4.go b/p2p/enode/urlv4.go
index 2372d4820..a9a3d1374 100644
--- a/p2p/enode/urlv4.go
+++ b/p2p/enode/urlv4.go
@@ -125,15 +125,17 @@ func parseComplete(rawurl string) (*Node, error) {
return nil, fmt.Errorf("invalid public key (%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)
+ return nil, err
}
- if ip = net.ParseIP(host); ip == nil {
- return nil, errors.New("invalid IP address")
+ 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
diff --git a/p2p/enode/urlv4_test.go b/p2p/enode/urlv4_test.go
index 12399d291..41a88eec6 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: `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,
),