github.com/shogo82148/std@v1.22.1-0.20240327122250-4e474527810c/net/lookup.go (about)

     1  // Copyright 2012 The Go Authors. All rights reserved.
     2  // Use of this source code is governed by a BSD-style
     3  // license that can be found in the LICENSE file.
     4  
     5  package net
     6  
     7  import (
     8  	"github.com/shogo82148/std/context"
     9  	"github.com/shogo82148/std/internal/singleflight"
    10  	"github.com/shogo82148/std/net/netip"
    11  	"golang.org/x/sync/singleflight"
    12  )
    13  
    14  // DefaultResolverは、パッケージレベルのLookup関数と指定されていないResolverを持つDialersによって使用されるリゾルバです。
    15  var DefaultResolver = &Resolver{}
    16  
    17  // Resolverは名前や数値を検索します。
    18  //
    19  // nil *ResolverはゼロのResolverと同等です。
    20  type Resolver struct {
    21  
    22  	// PreferGoは、利用可能なプラットフォーム上でGoの組み込みDNSリゾルバーを優先するかどうかを制御します。これはGODEBUG=netdns=goを設定するのと同等ですが、このリゾルバーにのみスコープされます。
    23  	PreferGo bool
    24  
    25  	// StrictErrorsは、一時的なエラー(タイムアウト、ソケットエラー、およびSERVFAILを含む)の動作を制御します。Goの組み込みリゾルバを使用する場合、このオプションは複数のサブクエリからなるクエリ(A+AAAAアドレスの検索やDNS検索リストの走査など)に対して、部分的な結果を返す代わりに、エラーが発生した場合にクエリ全体を中止させます。これはデフォルトでは有効にされていませんが、AAAAクエリを正しく処理しないリゾルバとの互換性に影響を与える可能性があるためです。
    26  	StrictErrors bool
    27  
    28  	// Dialは、Go言語の組み込みDNSリゾルバがTCPおよびUDP接続を作成するために使用する代替ダイラーをオプションで指定します。アドレスパラメーターのホストは常にリテラルIPアドレスであり、ホスト名ではありません。また、アドレスパラメーターのポートはリテラルポート番号であり、サービス名ではありません。
    29  	// 返されたConnがPacketConnでもある場合、送信および受信されるDNSメッセージはRFC 1035 Section 4.2.1 「UDP使用」に準拠する必要があります。
    30  	Dial func(ctx context.Context, network, address string) (Conn, error)
    31  
    32  	// lookupGroupは同じホストのルックアップをまとめてLookupIPAddr呼び出しをマージします。
    33  	// lookupGroupのキーはLookupIPAddr.hostの引数です。
    34  	// 返り値は([]IPAddr, error)です。
    35  	lookupGroup singleflight.Group
    36  }
    37  
    38  // LookupHostは、ローカルのリゾルバを使用して指定されたホストを検索します。
    39  // そのホストのアドレスのスライスを返します。
    40  //
    41  // LookupHostは、内部的に [context.Background] を使用します。コンテキストを指定するには、
    42  // [Resolver.LookupHost] を使用してください。
    43  func LookupHost(host string) (addrs []string, err error)
    44  
    45  // LookupHostは、ローカルのリゾルバを使用して指定されたホストを検索します。
    46  // そのホストのアドレスのスライスを返します。
    47  func (r *Resolver) LookupHost(ctx context.Context, host string) (addrs []string, err error)
    48  
    49  // LookupIPはローカルリゾルバを使用してホストを検索します。
    50  // それはそのホストのIPv4およびIPv6アドレスのスライスを返します。
    51  func LookupIP(host string) ([]IP, error)
    52  
    53  // LookupIPAddrは、ローカルのリゾルバを使用してホストを検索します。
    54  // そのホストのIPv4およびIPv6アドレスのスライスを返します。
    55  func (r *Resolver) LookupIPAddr(ctx context.Context, host string) ([]IPAddr, error)
    56  
    57  // LookupIPは、ローカルリゾルバーを使用して指定されたネットワークのホストを検索します。
    58  // networkによって指定されたタイプのホストのIPアドレスのスライスを返します。
    59  // networkは"ip"、"ip4"、または"ip6"のいずれかでなければなりません。
    60  func (r *Resolver) LookupIP(ctx context.Context, network, host string) ([]IP, error)
    61  
    62  // LookupNetIPはローカルリゾルバを使用してホストを検索します。
    63  // それは、ネットワークで指定されたタイプのそのホストのIPアドレスのスライスを返します。
    64  // ネットワークは、"ip"、"ip4"、または "ip6"のいずれかでなければなりません。
    65  func (r *Resolver) LookupNetIP(ctx context.Context, network, host string) ([]netip.Addr, error)
    66  
    67  var _ context.Context = (*onlyValuesCtx)(nil)
    68  
    69  // LookupPortは指定されたネットワークとサービスに対するポートを調べます。
    70  //
    71  // LookupPortは内部で [context.Background] を使用します。コンテキストを指定するには、
    72  // [Resolver.LookupPort] を使用してください。
    73  func LookupPort(network, service string) (port int, err error)
    74  
    75  // LookupPortは、指定されたネットワークとサービスのポートを検索します。
    76  //
    77  // networkは、"tcp"、"tcp4"、"tcp6"、"udp"、"udp4"、"udp6"、または"ip"のいずれかでなければなりません。
    78  func (r *Resolver) LookupPort(ctx context.Context, network, service string) (port int, err error)
    79  
    80  // LookupCNAMEは指定されたホストの正式な名前(カノニカル名)を返します。
    81  // カノニカル名に関心がない場合は、[LookupHost] または [LookupIP] を直接呼び出すことができます。
    82  // どちらも、ルックアップの一部としてカノニカル名の解決を行います。
    83  //
    84  // カノニカル名は、ゼロまたは複数のCNAMEレコードを辿った後の最終的な名前です。
    85  // hostにDNSの"CNAME"レコードが含まれていない場合でも、hostがアドレスレコードに解決されている限り、LookupCNAMEはエラーを返しません。
    86  //
    87  // 返されるカノニカル名は、正しくフォーマットされたプレゼンテーション形式のドメイン名であることが検証されます。
    88  //
    89  // LookupCNAMEは内部的に [context.Background] を使用します。コンテキストを指定するには、[Resolver.LookupCNAME] を使用してください。
    90  func LookupCNAME(host string) (cname string, err error)
    91  
    92  // LookupCNAMEは指定されたホストの正規名を返します。
    93  // 正規名に関心を持たない呼び出し元は、
    94  // [LookupHost] または [LookupIP] を直接呼び出すことができます。
    95  // 両者は名前解決の一環として正規名を処理します。
    96  //
    97  // 正規名は、ゼロ個以上のCNAMEレコードをたどった後の最終名です。
    98  // LookupCNAMEは、ホストがDNSの"CNAME"レコードを含まない場合でも、
    99  // ホストがアドレスレコードに解決されている限り、エラーを返しません。
   100  //
   101  // 返される正規名は、適切な形式のドメイン名であることが検証されます。
   102  func (r *Resolver) LookupCNAME(ctx context.Context, host string) (string, error)
   103  
   104  // LookupSRVは、指定されたサービス、プロトコル、およびドメイン名の [SRV] クエリを解決しようとします。
   105  // protoは「tcp」または「udp」です。
   106  // 返されるレコードは優先度に従ってソートされ、各優先度内で重みによってランダムになります。
   107  //
   108  // LookupSRVはRFC 2782に従って調べるDNS名を構築します。
   109  // つまり、_service._proto.nameを検索します。非標準の名前でSRVレコードを公開するサービスに対応するために、
   110  // serviceとprotoの両方が空の文字列の場合、LookupSRVは直接nameを検索します。
   111  //
   112  // 返されたサービス名は、適切な形式のプレゼンテーション形式のドメイン名であることが検証されます。
   113  // 応答に無効な名前が含まれている場合、これらのレコードはフィルタリングされ、エラーが返されます。
   114  // 残りの結果がある場合は、これらのエラーと一緒に返されます。
   115  func LookupSRV(service, proto, name string) (cname string, addrs []*SRV, err error)
   116  
   117  // LookupSRVは、指定されたサービス、プロトコル、ドメイン名の [SRV] クエリを解決しようとします。
   118  // プロトコルは「tcp」または「udp」です。
   119  // 返されるレコードは優先度でソートされ、優先度内でのウェイトによってランダムになります。
   120  //
   121  // LookupSRVは、RFC 2782に従ってルックアップするためのDNS名を構築します。
   122  // つまり、_service._proto.nameをルックアップします。非標準の名前の下にSRVレコードを公開するサービスを収容するために、
   123  // serviceとprotoの両方が空の文字列の場合、LookupSRVは直接nameをルックアップします。
   124  //
   125  // 返されるサービス名は、正しくフォーマットされたプレゼンテーション形式のドメイン名であることが検証されます。
   126  // レスポンスに無効な名前が含まれている場合、それらのレコードはフィルタリングされ、エラーが返されます。
   127  // 残りの結果がある場合、それらと一緒にエラーが返されます。
   128  func (r *Resolver) LookupSRV(ctx context.Context, service, proto, name string) (string, []*SRV, error)
   129  
   130  // LookupMXは指定されたドメイン名のDNS MXレコードを優先度に従ってソートして返します。
   131  //
   132  // 返されるメールサーバー名は、正しくフォーマットされた表示形式のドメイン名であることが検証されます。
   133  // レスポンスに無効な名前が含まれている場合、それらのレコードはフィルタリングされ、エラーと共に残りの結果が返されます(もしあれば)。
   134  //
   135  // LookupMXは内部的に [context.Background] を使用します。コンテキストを指定するには、[Resolver.LookupMX] を使用してください。
   136  func LookupMX(name string) ([]*MX, error)
   137  
   138  // LookupMXは、指定されたドメイン名のDNS MXレコードを優先度に基づいてソートして返します。
   139  // 返されるメールサーバー名は正しくフォーマットされたプレゼンテーション形式のドメイン名であることが検証されます。
   140  // レスポンスに無効な名前が含まれている場合、それらのレコードはフィルタリングされ、エラーが返されます。
   141  // 残りの結果がある場合、それらとともにエラーが返されます。
   142  func (r *Resolver) LookupMX(ctx context.Context, name string) ([]*MX, error)
   143  
   144  // LookupNSは指定されたドメイン名のDNS NSレコードを返します。
   145  //
   146  // 返されるネームサーバ名は、正しくフォーマットされた表示形式のドメイン名であることが検証されます。
   147  // 応答に無効な名前が含まれている場合、これらのレコードはフィルタリングされ、エラーが残りの結果と共に返されます。
   148  //
   149  // LookupNSは内部的に [context.Background] を使用します。コンテキストを指定するには、[Resolver.LookupNS] を使用します。
   150  func LookupNS(name string) ([]*NS, error)
   151  
   152  // LookupNSは指定されたドメイン名のDNS NSレコードを返します。
   153  //
   154  // 返されたネームサーバの名前は、正しくフォーマットされた
   155  // プレゼンテーション形式のドメイン名であることが検証されます。
   156  // もしレスポンスに無効な名前が含まれている場合、それらのレコードは
   157  // フィルタリングされ、エラーが返されます。
   158  // 残りの結果がある場合、それらとともにエラーが返されます。
   159  func (r *Resolver) LookupNS(ctx context.Context, name string) ([]*NS, error)
   160  
   161  // LookupTXTは指定されたドメイン名のDNS TXTレコードを返します。
   162  //
   163  // LookupTXTは内部で [context.Background] を使用します。コンテキストを指定するには、
   164  // [Resolver.LookupTXT] を使用してください。
   165  func LookupTXT(name string) ([]string, error)
   166  
   167  // LookupTXTは指定されたドメイン名のDNSのTXTレコードを返します。
   168  func (r *Resolver) LookupTXT(ctx context.Context, name string) ([]string, error)
   169  
   170  // LookupAddrは与えられたアドレスに対して逆引きを行い、そのアドレスにマッピングされる名前のリストを返します。
   171  // 返された名前は適切にフォーマットされたプレゼンテーション形式のドメイン名であることが検証されます。応答に無効な名前が含まれている場合、それらのレコードはフィルタリングされ、エラーと一緒に残りの結果(ある場合)が返されます。
   172  // ホストCライブラリリゾルバを使用する場合、最大で1つの結果が返されます。ホストリゾルバをバイパスするには、カスタム [Resolver] を使用してください。
   173  // LookupAddrは内部で [context.Background] を使用します。コンテキストを指定するには、[Resolver.LookupAddr] を使用してください。
   174  func LookupAddr(addr string) (names []string, err error)
   175  
   176  // LookupAddrは指定されたアドレスの逆引きを行い、そのアドレスにマッピングされる名前のリストを返します。
   177  //
   178  // 返された名前は適切なフォーマットのプレゼンテーション形式のドメイン名であることが検証されます。
   179  // もし回答に無効な名前が含まれている場合、それらのレコードはフィルタリングされ、
   180  // 残りの結果がある場合はエラーが返されます。
   181  func (r *Resolver) LookupAddr(ctx context.Context, addr string) ([]string, error)