Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
M
mybee
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
vicotor
mybee
Commits
25775c3a
Unverified
Commit
25775c3a
authored
Feb 19, 2021
by
Ivan Vandot
Committed by
GitHub
Feb 19, 2021
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
enable dns entry for nat-addr (#1278)
parent
6c196c84
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
100 additions
and
18 deletions
+100
-18
go.mod
go.mod
+1
-0
go.sum
go.sum
+7
-0
static_resolver.go
pkg/p2p/libp2p/static_resolver.go
+54
-18
static_resolver_test.go
pkg/p2p/libp2p/static_resolver_test.go
+38
-0
No files found.
go.mod
View file @
25775c3a
...
...
@@ -13,6 +13,7 @@ require (
github.com/ethersphere/langos v1.0.0
github.com/ethersphere/manifest v0.3.6
github.com/ethersphere/sw3-bindings/v2 v2.1.0
github.com/foxcpp/go-mockdns v0.0.0-20201212160233-ede2f9158d15
github.com/go-ole/go-ole v1.2.4 // indirect
github.com/gogo/protobuf v1.3.1
github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e // indirect
...
...
go.sum
View file @
25775c3a
...
...
@@ -191,6 +191,8 @@ github.com/flynn/go-shlex v0.0.0-20150515145356-3f9db97f8568/go.mod h1:xEzjJPgXI
github.com/flynn/noise v0.0.0-20180327030543-2492fe189ae6 h1:u/UEqS66A5ckRmS4yNpjmVH56sVtS/RfclBAYocb4as=
github.com/flynn/noise v0.0.0-20180327030543-2492fe189ae6/go.mod h1:1i71OnUq3iUe1ma7Lr6yG6/rjvM3emb6yoL7xLFzcVQ=
github.com/fortytw2/leaktest v1.3.0/go.mod h1:jDsjWgpAGjm2CA7WthBh/CdZYEPF31XHquHwclZch5g=
github.com/foxcpp/go-mockdns v0.0.0-20201212160233-ede2f9158d15 h1:nLPjjvpUAODOR6vY/7o0hBIk8iTr19Fvmf8aFx/kC7A=
github.com/foxcpp/go-mockdns v0.0.0-20201212160233-ede2f9158d15/go.mod h1:tPg4cp4nseejPd+UKxtCVQ2hUxNTZ7qQZJa7CLriIeo=
github.com/francoispqt/gojay v1.2.13 h1:d2m3sFjloqoIUQU3TsHBgj6qg/BVGlTBeHDUmyJnXKk=
github.com/francoispqt/gojay v1.2.13/go.mod h1:ehT5mTG4ua4581f1++1WLG0vPdaA9HaiDsoyrBGkyDY=
github.com/frankban/quicktest v1.7.2/go.mod h1:jaStnuzAqU1AJdCO0l53JDCJrVDKcS03DbaAcR7Ks/o=
...
...
@@ -730,7 +732,9 @@ github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b/go.mod h1:01TrycV0kFyex
github.com/microcosm-cc/bluemonday v1.0.1/go.mod h1:hsXNsILzKxV+sX77C5b8FSuKF00vh2OMYv+xgHpAMF4=
github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg=
github.com/miekg/dns v1.1.12/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg=
github.com/miekg/dns v1.1.22/go.mod h1:bPDLeHnStXmXAq1m/Ch/hvfNHr14JKNPMBo3VZKjuso=
github.com/miekg/dns v1.1.28/go.mod h1:KNUDUusw/aVsxyTYZM1oqvCicbwhgbNgztCETuNZ7xM=
github.com/miekg/dns v1.1.31 h1:sJFOl9BgwbYAWOGEwr61FU28pqsBNdpRBnhGXtO06Oo=
github.com/miekg/dns v1.1.31/go.mod h1:KNUDUusw/aVsxyTYZM1oqvCicbwhgbNgztCETuNZ7xM=
github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1 h1:lYpkrQH5ajf0OXOcUbGjvZxxijuBwbbmlSxLiuofa+g=
github.com/minio/blake2b-simd v0.0.0-20160723061019-3f5f724cb5b1/go.mod h1:pD8RvIylQ358TN4wwqatJ8rNavkEINozVn9DtGI3dfQ=
...
...
@@ -1136,6 +1140,7 @@ golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8U
golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20190618222545-ea8f1a30c443/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20190923035154-9ee001bba392/go.mod h1:/lpIB1dKB+9EgE3H3cr1v9wB50oz8l4C4h62xy7jSTY=
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20191219195013-becbf705a915/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/crypto v0.0.0-20200115085410-6d4e4cb37c7d/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
...
...
@@ -1268,6 +1273,7 @@ golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7w
golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190626221950-04f50cda93cb/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190922100055-0a153f010e69/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20190924154521-2837fb4f24fe/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
...
...
@@ -1327,6 +1333,7 @@ golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgw
golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc=
golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20190907020128-2ca718005c18/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
...
...
pkg/p2p/libp2p/static_resolver.go
View file @
25775c3a
...
...
@@ -15,8 +15,8 @@ import (
)
type
staticAddressResolver
struct
{
ip
Proto
string
port
string
multi
Proto
string
port
string
}
func
newStaticAddressResolver
(
addr
string
)
(
*
staticAddressResolver
,
error
)
{
...
...
@@ -24,21 +24,18 @@ func newStaticAddressResolver(addr string) (*staticAddressResolver, error) {
if
err
!=
nil
{
return
nil
,
err
}
var
ipProto
string
var
multiProto
string
if
host
!=
""
{
ip
:=
net
.
ParseIP
(
host
)
if
ip
==
nil
{
return
nil
,
fmt
.
Errorf
(
"invalid IP %q"
,
host
)
}
if
ip
.
To4
()
!=
nil
{
ipProto
=
"/ip4/"
+
ip
.
String
()
}
else
{
ipProto
=
"/ip6/"
+
ip
.
String
()
multiProto
,
err
=
getMultiProto
(
host
)
if
err
!=
nil
{
return
nil
,
err
}
}
return
&
staticAddressResolver
{
ipProto
:
ip
Proto
,
port
:
port
,
multiProto
:
multi
Proto
,
port
:
port
,
},
nil
}
...
...
@@ -59,11 +56,11 @@ func (r *staticAddressResolver) Resolve(observedAddress ma.Multiaddr) (ma.Multia
return
observedAddress
,
nil
}
var
ip
Proto
string
if
r
.
ip
Proto
!=
""
{
ipProto
=
r
.
ip
Proto
var
multi
Proto
string
if
r
.
multi
Proto
!=
""
{
multiProto
=
r
.
multi
Proto
}
else
{
ip
Proto
=
strings
.
Join
(
observedAddrSplit
[
:
3
],
"/"
)
multi
Proto
=
strings
.
Join
(
observedAddrSplit
[
:
3
],
"/"
)
}
var
port
string
...
...
@@ -72,10 +69,49 @@ func (r *staticAddressResolver) Resolve(observedAddress ma.Multiaddr) (ma.Multia
}
else
{
port
=
observedAddrSplit
[
4
]
}
a
,
err
:=
ma
.
NewMultiaddr
(
ip
Proto
+
"/"
+
observedAddrSplit
[
3
]
+
"/"
+
port
)
a
,
err
:=
ma
.
NewMultiaddr
(
multi
Proto
+
"/"
+
observedAddrSplit
[
3
]
+
"/"
+
port
)
if
err
!=
nil
{
return
nil
,
err
}
return
buildUnderlayAddress
(
a
,
observableAddrInfo
.
ID
)
}
func
getMultiProto
(
host
string
)
(
string
,
error
)
{
if
host
==
""
{
return
""
,
nil
}
ip
:=
net
.
ParseIP
(
host
)
if
ip
!=
nil
{
if
ip
.
To4
()
==
nil
{
return
"/ip6/"
+
ip
.
String
(),
nil
}
return
"/ip4/"
+
ip
.
String
(),
nil
}
ips
,
err
:=
net
.
LookupIP
(
host
)
if
err
!=
nil
{
return
""
,
fmt
.
Errorf
(
"invalid IP or Domain Name %q"
,
host
)
}
ipv4
,
ipv6
:=
ipsClassifier
(
ips
)
if
ipv4
{
if
ipv6
{
return
"/dns/"
+
host
,
nil
}
return
"/dns4/"
+
host
,
nil
}
return
"/dns6/"
+
host
,
nil
}
func
ipsClassifier
(
ips
[]
net
.
IP
)
(
ipv4
,
ipv6
bool
)
{
for
_
,
ip
:=
range
ips
{
if
ip
.
To4
()
!=
nil
{
ipv4
=
true
}
else
{
ipv6
=
true
}
if
ipv4
&&
ipv6
{
return
}
}
return
}
pkg/p2p/libp2p/static_resolver_test.go
View file @
25775c3a
...
...
@@ -5,13 +5,31 @@
package
libp2p_test
import
(
"net"
"runtime"
"strings"
"testing"
"github.com/ethersphere/bee/pkg/p2p/libp2p"
mockdns
"github.com/foxcpp/go-mockdns"
ma
"github.com/multiformats/go-multiaddr"
)
func
TestStaticAddressResolver
(
t
*
testing
.
T
)
{
srv
,
_
:=
mockdns
.
NewServer
(
map
[
string
]
mockdns
.
Zone
{
"ipv4.com."
:
{
A
:
[]
string
{
"192.168.1.34"
},
},
"ipv4and6.com."
:
{
A
:
[]
string
{
"192.168.1.34"
},
AAAA
:
[]
string
{
"2001:db8::8a2e:370:1111"
},
},
},
false
)
defer
srv
.
Close
()
srv
.
PatchNet
(
net
.
DefaultResolver
)
defer
mockdns
.
UnpatchNet
(
net
.
DefaultResolver
)
for
_
,
tc
:=
range
[]
struct
{
name
string
natAddr
string
...
...
@@ -66,7 +84,27 @@ func TestStaticAddressResolver(t *testing.T) {
observableAddress
:
"/ip6/2001:db8::8a2e:370:7334/tcp/7071/p2p/16Uiu2HAkyyGKpjBiCkVqCKoJa6RzzZw9Nr7hGogsMPcdad1KyMmd"
,
want
:
"/ip4/192.168.1.34/tcp/30777/p2p/16Uiu2HAkyyGKpjBiCkVqCKoJa6RzzZw9Nr7hGogsMPcdad1KyMmd"
,
},
{
name
:
"replace ip v6 and port with dns v4"
,
natAddr
:
"ipv4.com:30777"
,
observableAddress
:
"/ip6/2001:db8::8a2e:370:7334/tcp/7071/p2p/16Uiu2HAkyyGKpjBiCkVqCKoJa6RzzZw9Nr7hGogsMPcdad1KyMmd"
,
want
:
"/dns4/ipv4.com/tcp/30777/p2p/16Uiu2HAkyyGKpjBiCkVqCKoJa6RzzZw9Nr7hGogsMPcdad1KyMmd"
,
},
{
name
:
"replace ip v4 and port with dns"
,
natAddr
:
"ipv4and6.com:30777"
,
observableAddress
:
"/ip4/127.0.0.1/tcp/7071/p2p/16Uiu2HAkyyGKpjBiCkVqCKoJa6RzzZw9Nr7hGogsMPcdad1KyMmd"
,
want
:
"/dns/ipv4and6.com/tcp/30777/p2p/16Uiu2HAkyyGKpjBiCkVqCKoJa6RzzZw9Nr7hGogsMPcdad1KyMmd"
,
},
}
{
if
strings
.
Contains
(
tc
.
name
,
"dns"
)
{
// The windows and plan9 implementation of the resolver does not use
// the Dial function.
switch
runtime
.
GOOS
{
case
"windows"
,
"plan9"
:
t
.
Skipf
(
"skipped all dns resolver tests on %v"
,
runtime
.
GOOS
)
}
}
t
.
Run
(
tc
.
name
,
func
(
t
*
testing
.
T
)
{
r
,
err
:=
libp2p
.
NewStaticAddressResolver
(
tc
.
natAddr
)
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment