Skip to content

Commit b90cdba

Browse files
dipingxian2fjl
authored andcommitted
p2p/enode: allow DNS names in enode URLs (#18524)
1 parent 4d358b9 commit b90cdba

File tree

2 files changed

+10
-8
lines changed

2 files changed

+10
-8
lines changed

p2p/enode/urlv4.go

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -125,15 +125,17 @@ func parseComplete(rawurl string) (*Node, error) {
125125
return nil, fmt.Errorf("invalid public key (%v)", err)
126126
}
127127
// Parse the IP address.
128-
host, port, err := net.SplitHostPort(u.Host)
128+
ips, err := net.LookupIP(u.Hostname())
129129
if err != nil {
130-
return nil, fmt.Errorf("invalid host: %v", err)
130+
return nil, err
131131
}
132-
if ip = net.ParseIP(host); ip == nil {
133-
return nil, errors.New("invalid IP address")
132+
ip = ips[0]
133+
// Ensure the IP is 4 bytes long for IPv4 addresses.
134+
if ipv4 := ip.To4(); ipv4 != nil {
135+
ip = ipv4
134136
}
135137
// Parse the port numbers.
136-
if tcpPort, err = strconv.ParseUint(port, 10, 16); err != nil {
138+
if tcpPort, err = strconv.ParseUint(u.Port(), 10, 16); err != nil {
137139
return nil, errors.New("invalid port")
138140
}
139141
udpPort = tcpPort

p2p/enode/urlv4_test.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -61,8 +61,8 @@ var parseNodeTests = []struct {
6161
},
6262
// Complete node URLs with IP address and ports
6363
{
64-
input: "enode://1dd9d65c4552b5eb43d5ad55a2ee3f56c6cbc1c64a5c8d659f51fcd51bace24351232b8d7821617d2b29b54b81cdefb9b3e9c37d7fd5f63270bcc9e1a6f6a439@hostname:3",
65-
wantError: `invalid IP address`,
64+
input: "enode://1dd9d65c4552b5eb43d5ad55a2ee3f56c6cbc1c64a5c8d659f51fcd51bace24351232b8d7821617d2b29b54b81cdefb9b3e9c37d7fd5f63270bcc9e1a6f6a439@invalid.:3",
65+
wantError: `no such host`,
6666
},
6767
{
6868
input: "enode://1dd9d65c4552b5eb43d5ad55a2ee3f56c6cbc1c64a5c8d659f51fcd51bace24351232b8d7821617d2b29b54b81cdefb9b3e9c37d7fd5f63270bcc9e1a6f6a439@127.0.0.1:foo",
@@ -76,7 +76,7 @@ var parseNodeTests = []struct {
7676
input: "enode://1dd9d65c4552b5eb43d5ad55a2ee3f56c6cbc1c64a5c8d659f51fcd51bace24351232b8d7821617d2b29b54b81cdefb9b3e9c37d7fd5f63270bcc9e1a6f6a439@127.0.0.1:52150",
7777
wantResult: NewV4(
7878
hexPubkey("1dd9d65c4552b5eb43d5ad55a2ee3f56c6cbc1c64a5c8d659f51fcd51bace24351232b8d7821617d2b29b54b81cdefb9b3e9c37d7fd5f63270bcc9e1a6f6a439"),
79-
net.IP{0x7f, 0x0, 0x0, 0x1},
79+
net.IP{127, 0, 0, 1},
8080
52150,
8181
52150,
8282
),

0 commit comments

Comments
 (0)