ホームページ >バックエンド開発 >Golang >Go でダイヤルするためのネットワーク インターフェイスを指定するにはどうすればよいですか?

Go でダイヤルするためのネットワーク インターフェイスを指定するにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-12-07 17:05:14326ブラウズ

How to Specify a Network Interface for Dialing in Go?

Go でのダイヤルでソース インターフェースを設定する

複数のインターフェースを持つネットワークでは、特定のインターフェースを使用して接続をダイヤルすることが必要な場合があります。 。 Go の低レベルの性質にもかかわらず、標準ライブラリは本質的にこれをサポートしません。

これを試みるために、InterfaceByName を使用してターゲット インターフェイス eth1 を取得し、Addrs を使用して最初のアドレスを抽出し、取得したアドレスをLocalAddrとして取得します。ただし、「ローカル アドレスの種類が一致しません」というエラーが発生します。

この問題は、インターフェイスから取得されたアドレスが、アドレスとネットマスクの両方を表す *net.IPnet タイプであるために発生します。ダイヤルするには、アドレスとポートである *net.TCPAddr が必要です。

この問題を解決するには、インターフェイス アドレスを *net.IPnet としてアサートした後、*net.TCPAddr を明示的に作成します。

    ief, err := net.InterfaceByName("eth1")
    if err !=nil{
            log.Fatal(err)
    }
    addrs, err := ief.Addrs()
    if err !=nil{
            log.Fatal(err)
    }

    tcpAddr := &net.TCPAddr{
        IP: addrs[0].(*net.IPNet).IP,
    }

この構成により、ダイヤラは指定されたインターフェイスを使用して接続を確立できるようになります。

以上がGo でダイヤルするためのネットワーク インターフェイスを指定するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。