README ¶
go-multiaddr-dns
Resolve /dns4, /dns6, and /dnsaddr multiaddrs.
> madns /dnsaddr/ipfs.io/ipfs/QmSoLju6m7xTh3DuokvT3886QRYqxAzb1kShaanJgW36yx
/ip4/104.236.151.122/tcp/4001/ipfs/QmSoLju6m7xTh3DuokvT3886QRYqxAzb1kShaanJgW36yx
/ip6/2604:a880:1:20::1d9:6001/tcp/4001/ipfs/QmSoLju6m7xTh3DuokvT3886QRYqxAzb1kShaanJgW36yx
/ip6/fc3d:9a4e:3c96:2fd2:1afa:18fe:8dd2:b602/tcp/4001/ipfs/QmSoLju6m7xTh3DuokvT3886QRYqxAzb1kShaanJgW36yx
/dns4/jupiter.i.ipfs.io/tcp/4001/ipfs/QmSoLju6m7xTh3DuokvT3886QRYqxAzb1kShaanJgW36yx
/dns6/jupiter.i.ipfs.io/tcp/4001/ipfs/QmSoLju6m7xTh3DuokvT3886QRYqxAzb1kShaanJgW36yx
In more detail:
> madns /dns6/example.net
/ip6/2001:db8::a3
/ip6/2001:db8::a4
...
> madns /dns4/example.net/tcp/443/wss
/ip4/192.0.2.1/tcp/443/wss
/ip4/192.0.2.2/tcp/443/wss
# No-op if it's not a dns-ish address.
> madns /ip4/127.0.0.1/tcp/8080
/ip4/127.0.0.1/tcp/8080
# /dnsaddr resolves by looking up TXT records.
> dig +short TXT _dnsaddr.example.net
"dnsaddr=/ip6/2001:db8::a3/tcp/443/wss/ipfs/Qmfoo"
"dnsaddr=/ip6/2001:db8::a4/tcp/443/wss/ipfs/Qmbar"
"dnsaddr=/ip4/192.0.2.1/tcp/443/wss/ipfs/Qmfoo"
"dnsaddr=/ip4/192.0.2.2/tcp/443/wss/ipfs/Qmbar"
...
# /dnsaddr returns addrs which encapsulate whatever /dnsaddr encapsulates too.
> madns example.net/ipfs/Qmfoo
info: changing query to /dnsaddr/example.net/ipfs/Qmfoo
/ip6/2001:db8::a3/tcp/443/wss/ipfs/Qmfoo
/ip4/192.0.2.1/tcp/443/wss/ipfs/Qmfoo
# TODO -p filters by protocol stacks.
> madns -p /ip6/tcp/wss /dnsaddr/example.net
/ip6/2001:db8::a3/tcp/443/wss/ipfs/Qmfoo
/ip6/2001:db8::a4/tcp/443/wss/ipfs/Qmbar
# TODO -c filters by CIDR
> madns -c /ip4/104.236.76.0/ipcidr/24 /dnsaddr/example.net
/ip4/192.0.2.2/tcp/443/wss/ipfs/Qmbar
Documentation ¶
Index ¶
Constants ¶
const ( // Deprecated: use ma.P_DNS P_DNS = ma.P_DNS // Deprecated: use ma.P_DNS4 P_DNS4 = ma.P_DNS4 // Deprecated: use ma.P_DNS6 P_DNS6 = ma.P_DNS6 // Deprecated: use ma.P_DNSADDR P_DNSADDR = ma.P_DNSADDR )
Extracted from source of truth for multicodec codes: https://github.com/multiformats/multicodec
Variables ¶
var DefaultResolver = &Resolver{def: net.DefaultResolver}
var Dns4Protocol = ma.ProtocolWithCode(P_DNS4)
Deprecated: use ma.ProtocolWithCode(P_DNS4)
var Dns6Protocol = ma.ProtocolWithCode(P_DNS6)
Deprecated: use ma.ProtocolWithCode(P_DNS6)
var DnsProtocol = ma.ProtocolWithCode(P_DNS)
Deprecated: use ma.ProtocolWithCode(P_DNS)
var DnsaddrProtocol = ma.ProtocolWithCode(P_DNSADDR)
Deprecated: use ma.ProtocolWithCode(P_DNSADDR)
var ResolvableProtocols = []ma.Protocol{DnsaddrProtocol, Dns4Protocol, Dns6Protocol, DnsProtocol}
Functions ¶
Types ¶
type BasicResolver ¶ added in v0.3.0
type BasicResolver interface { LookupIPAddr(context.Context, string) ([]net.IPAddr, error) LookupTXT(context.Context, string) ([]string, error) }
BasicResolver is a low level interface for DNS resolution
type MockResolver ¶ added in v0.3.0
func (*MockResolver) LookupIPAddr ¶ added in v0.3.0
type Option ¶ added in v0.3.0
func WithDefaultResolver ¶ added in v0.3.0
func WithDefaultResolver(def BasicResolver) Option
WithDefaultResolver is an option that specifies the default basic resolver, which resolves any TLD that doesn't have a custom resolver. Defaults to net.DefaultResolver
func WithDomainResolver ¶ added in v0.3.0
func WithDomainResolver(domain string, rslv BasicResolver) Option
WithDomainResolver specifies a custom resolver for a domain/TLD. Custom resolver selection matches domains left to right, with more specific resolvers superseding generic ones.
type Resolver ¶
type Resolver struct {
// contains filtered or unexported fields
}
Resolver is an object capable of resolving dns multiaddrs by using one or more BasicResolvers; it supports custom per domain/TLD resolvers. It also implements the BasicResolver interface so that it can act as a custom per domain/TLD resolver.
func NewResolver ¶ added in v0.3.0
NewResolver creates a new Resolver instance with the specified options