Golang melaksanakan penukaran ip
Dalam pengaturcaraan rangkaian, alamat IP memainkan peranan penting. Walau bagaimanapun, dalam beberapa senario aplikasi khas, penukaran IP perlu dilaksanakan Sebagai contoh, beberapa program perangkak, permainan dalam talian, dll. perlu menukar IP dengan kerap untuk memastikan kejayaan operasi. Apabila melaksanakan pensuisan IP, golang boleh menyediakan kaedah yang lebih mudah.
Dalam pengaturcaraan rangkaian, alamat IP biasanya terdiri daripada 32 bit binari, biasanya ditulis sebagai empat nombor perpuluhan, dengan Dipisahkan oleh ".", seperti 192.168.100.1. Antaranya, tiga segmen pertama alamat IP mewakili nombor rangkaian, dan segmen terakhir mewakili nombor hos.
Pensuisan IP boleh dicapai dengan memanggil fungsi di bawah pakej bersih di golang. Pertama, anda perlu mendapatkan alamat IP mesin ini Anda boleh menggunakan kod berikut:
addrs, err := net.InterfaceAddrs() if err != nil { log.Fatal(err) } for _, addr := range addrs { if ipnet, ok := addr.(*net.IPNet); ok && !ipnet.IP.IsLoopback() && ipnet.IP.To4() != nil { fmt.Printf("local ip address: %s\n", ipnet.IP.String()) } }
Kod di atas mendapatkan alamat IPnya dengan merentasi semua antara muka rangkaian mesin ini. Antaranya, ok bermakna alamat IP semasa adalah milik alamat jenis net.IPNet dan bukan alamat gelung balik ipnet.IP.To4() != nil bermaksud alamat jenis IPv4 yang dikembalikan adalah.
Andaikan kami mempunyai senarai alamat IP, dan anda boleh memilih salah satu daripadanya melalui kod berikut:
var ips = []string{"192.168.0.101", "192.168.0.102", "192.168.0.103"} conn, err := net.Dial("udp", "baidu.com:80") if err != nil { log.Fatal(err) } localAddr := conn.LocalAddr().(*net.UDPAddr) defer conn.Close() var ip net.IP for _, v := range ips { parsedIP := net.ParseIP(v) if parsedIP == nil { //无法将字符串转换为IPv4或IPv6地址 continue } if localAddr.IP.Equal(parsedIP) { continue } ip = parsedIP break }
Dalam kod di atas, kami mula-mula menggunakan fungsi net.Dail untuk dail UDP Connect, dan kemudian dapatkan alamat IP tempatan sambungan untuk pemilihan mudah dalam senarai IP. Kami merentasi senarai IP, mencari alamat IP yang tersedia, dan akhirnya memilih alamat IP yang berbeza daripada IP tempatan untuk melengkapkan suis alamat IP.
Apabila merangkak tapak web sasaran, selalunya perlu untuk melaksanakan penukaran IP melalui proksi. Seterusnya, kami menerangkan cara menggunakan proksi untuk penukaran IP.
Pertama, anda perlu menentukan jenis proksi:
type Proxy struct { URL string User string Password string DialerFunc func(network, address string) (net.Conn, error) }
Jenis proksi termasuk alamat proksi (URL), pengesahan proksi (Pengguna, Kata Laluan) dan fungsi dail. Antaranya, parameter fungsi dail ialah protokol rangkaian (seperti TCP, UDP) dan alamat IP yang ditentukan, dan ia mengembalikan contoh sambungan rangkaian.
Berdasarkan perkara ini, kami boleh menggunakan kod berikut untuk melakukan penukaran IP:
func main() { var proxy = Proxy{ URL: "http://60.205.200.130:80", User: "", Password: "", DialerFunc: func(network, address string) (conn net.Conn, e error) { return net.Dial("tcp", "60.205.200.130:80") }, } transport := &http.Transport{ Dial: proxy.DialerFunc, } client := &http.Client{ Transport: transport, } res, err := client.Get("http://www.baidu.com") if err != nil { log.Fatal(err) } defer res.Body.Close() body, err := ioutil.ReadAll(res.Body) if err != nil { log.Fatal(err) } fmt.Println(string(body)) }
Dalam kod, kami mula-mula mentakrifkan jenis proksi dan mentakrifkan fungsi DialerFunc di dalamnya, kami gunakan fungsi net.Dail untuk menyambung ke alamat rangkaian 60.205.200.130:80 untuk mewujudkan sambungan TCP. Seterusnya, kami mentakrifkan contoh jenis &http.Transport dan lulus dalam fungsi Dail, yang digunakan untuk membalas permintaan http. Akhir sekali, kami mentakrifkan contoh jenis &http.Pelanggan dan lulus dalam contoh Pengangkutan, yang digunakan untuk melaksanakan permintaan http.
Berdasarkan kod di atas, kami boleh mencapai tujuan penukaran IP dengan menukar alamat proksi beberapa kali.
Ringkasan
Artikel ini terutamanya memperkenalkan kaedah melaksanakan penukaran IP dalam golang Dengan menggunakan fungsi dalam pakej bersih di golang, anda boleh mengendalikan alamat IP dengan lebih mudah. Dalam penggunaan proksi, kami boleh melaksanakan permintaan simulasi untuk alamat IP yang berbeza dalam aplikasi seperti perangkak web untuk memenuhi keperluan senario aplikasi.
Atas ialah kandungan terperinci Bagaimana untuk melaksanakan pensuisan ip dalam golang. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!