Επίλυση ονομάτων SOCKS5 στον πελάτη HTTP του Go
Γιατί τα socks5 και socks5h δεν επιλέγουν διαφορετικούς τρόπους DNS στην πρότυπη μεταφορά HTTP του Go.
Στην πρότυπη μεταφορά HTTP του Go 1.27.3, τα socks5 και socks5h χειρίζονται τα ονόματα προορισμού με τον ίδιο τρόπο. Ένας προορισμός με όνομα κεντρικού υπολογιστή στέλνεται στο proxy ως όνομα. Η αλλαγή αυτών των σχημάτων δεν εναλλάσσει τοπικό και απομακρυσμένο DNS όπως στο curl.
package main
import (
"fmt"
"log"
"net/http"
"net/url"
"time"
)
func main() {
proxyURL, err := url.Parse("socks5://203.0.113.10:1080")
if err != nil {
log.Fatal(err)
}
transport := http.DefaultTransport.(*http.Transport).Clone()
transport.Proxy = http.ProxyURL(proxyURL)
defer transport.CloseIdleConnections()
client := &http.Client{
Transport: transport,
Timeout: 15 * time.Second,
}
response, err := client.Get("https://example.com/")
if err != nil {
log.Fatal(err)
}
defer response.Body.Close()
fmt.Println(response.StatusCode)
}
Αντικαταστήστε τη διεύθυνση τεκμηρίωσης με το δικό σας τελικό σημείο SOCKS5· μπορείτε να βρείτε υποψηφίους στη λίστα SOCKS5 proxy. Το παράδειγμα χρησιμοποιεί τη μεταφορά του ίδιου του net/http· άλλη βιβλιοθήκη Go μπορεί να συμπεριφέρεται διαφορετικά.
Παραμένουν δύο ονόματα που πρέπει να διακρίνετε. Μια αριθμητική διεύθυνση proxy δεν απαιτεί αναζήτηση του ονόματός του· ένα proxy με όνομα πρέπει να βρεθεί τοπικά πριν σταλεί αίτημα SOCKS. Ένας αριθμητικός προορισμός δεν έχει όνομα προς επίλυση και δεν αποδεικνύει χειρισμό ονομάτων. Για την πραγματική επιλογή SOCKS, ελέγξτε αν το πεδίο προορισμού μεταφέρει όνομα ή διεύθυνση.
Η πρότυπη μεταφορά υποστηρίζει τα σχήματα proxy http, https, socks5 και socks5h. Μια γενική ένδειξη SOCKS δεν αποδεικνύει υποστήριξη SOCKS5 στο τελικό σημείο. Το παράδειγμα στέλνει HTTP μέσω TCP και δεν ελέγχει άλλες εντολές SOCKS ή αναμετάδοση UDP.