Golang ialah bahasa pengaturcaraan sumber terbuka untuk bahasa pengaturcaraan moden, popular untuk keselamatan ingatan dan keupayaan konkurensi yang tinggi. Di Golang, menyediakan DNS juga merupakan keperluan biasa, dan prosesnya tidak begitu mudah. Artikel ini akan berdasarkan bahasa Golang dan memperkenalkan anda cara menetapkan DNS dalam program.
1. Pengetahuan asas DNS
Sistem Nama Domain (DNS) ialah perkhidmatan Internet Sebagai pangkalan data teragih yang memetakan nama domain dan alamat IP antara satu sama lain, ia boleh menjadikannya memudahkan orang ramai mengakses Internet. Berbanding dengan alamat IP, nama domain lebih mudah diingat dan lebih intuitif, yang meningkatkan kecekapan penggunaan orang ramai.
Apabila pengguna komputer memasukkan nama domain dalam penyemak imbas atau aplikasi Internet lain, komputer pengguna akan mula-mula menghantar permintaan kepada pelayan nama domain tempatan Jika pelayan nama domain tempatan tidak mempunyai maklumat pemetaan nama domain, ia akan menghantar permintaan kepada pelayan nama domain antarabangsa DNS ditanya dan alamat IP yang sepadan akhirnya dikembalikan.
2. Kaedah tetapan DNS di Golang
Di Golang, anda boleh menggunakan kaedah net
dalam pakej ResolveIPAddr
untuk melaksanakan resolusi alamat DNS. ResolveIPAddr
Fungsi menerima jenis rangkaian dan rentetan alamat serta mengembalikan alamat IP. Berikut ialah contoh program asas yang menggunakan resolusi DNS untuk menyelesaikan nama domain menjadi alamat:
package main import ( "fmt" "net" ) func main() { ip, err := net.ResolveIPAddr("ip", "www.google.com") if err != nil { fmt.Println("解析域名失败!", err) return } fmt.Println("Google 的 IP 地址是:", ip) }
Apabila anda menjalankan kod di atas, anda boleh melihat maklumat alamat IP Google dalam output.
Walau bagaimanapun, dalam beberapa kes, kami perlu menetapkan alamat DNS secara manual untuk kawalan yang lebih halus. DNS boleh disediakan menggunakan net
taip dalam pakej Dialer
. Berikut ialah contoh kod untuk menetapkan alamat DNS setempat:
package main import ( "fmt" "net" "net/http" "time" ) func main() { // 创建一个新的 Dialer d := &net.Dialer{ Timeout: 30 * time.Second, // 连接超时时间 KeepAlive: 30 * time.Second, // 保持连接 DualStack: true, // 支持 IPv4 和 IPv6 } // 设置 DNS resolver := &net.Resolver{ PreferGo: true, Dial: d.Dial, } // 将代理设置为 http.Transport 中的 Dial 函数 transport := &http.Transport{ DialContext: (&net.Dialer{ Timeout: 30 * time.Second, // 连接超时时间 KeepAlive: 30 * time.Second, // 保持连接 DualStack: true, // 支持 IPv4 和 IPv6 Resolver: resolver, // 使用新设置的解析器 }).DialContext, TLSHandshakeTimeout: 10 * time.Second, // TLS 握手超时时间 } // 设置 http 客户端 client := &http.Client{ Timeout: time.Second * 60, // 超时时间 Transport: transport, // 使用新设置的 transport } // 访问一个带有 DNS 规则的网站 req, err := http.NewRequest(http.MethodGet, "http://www.google.com", nil) if err != nil { fmt.Println(err) return } resp, err := client.Do(req) if err != nil { fmt.Println(err) return } defer resp.Body.Close() body, err := io.ReadAll(resp.Body) if err != nil { fmt.Println(err) return } fmt.Println(string(body)) }
Dalam kod di atas, kami menggunakan jenis net.Dialer
untuk menetapkan beberapa parameter sambungan, termasuk tamat masa dan jenis protokol yang disokong. Gunakan jenis net.Resolver
untuk menetapkan beberapa parameter DNS, termasuk memberi keutamaan kepada penyelesai DNS Go, menggunakan net.Dialer
untuk menyambung, dsb., dan hantarkannya kepada atribut net.Dialer
dalam Resolver
. Gunakan fungsi DialContext kedua dalam http.Transport
untuk menyediakan penghurai baharu. Akhir sekali, gunakan http
baharu dalam pelanggan Transport
.
3. Ringkasan
Artikel ini memperkenalkan kaedah asas untuk menyediakan DNS di Golang. Dengan menggunakan pakej net
kami boleh menghuraikan nama domain dan cuba menukarnya kepada alamat IP. Pada masa yang sama, untuk mengawal fungsi program dengan lebih baik, kita juga boleh menggunakan dua jenis net.Dialer
dan http.Transport
untuk kawalan yang lebih halus. Sudah tentu, dalam pembangunan sebenar, kita mungkin perlu menggabungkan keperluan dan persekitaran khusus dan menggunakan kaedah penetapan yang sepadan untuk pembangunan.
Atas ialah kandungan terperinci golang set dns. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!