Go HTTP සේවාලාභියා තුළ SOCKS5 ධාරක නාම විසඳීම
Go හි සම්මත HTTP transport තුළ socks5 සහ socks5h වෙනස් DNS මාදිලි තෝරා නොගන්නේ මන්දැයි තේරුම් ගන්න.
Go 1.27.3 හි සම්මත HTTP transport තුළ socks5 සහ socks5h ගමනාන්ත නාම එකම ආකාරයෙන් හසුරුවයි. ධාරක නාමයකින් දක්වා ඇති ඉලක්කයක් ප්රොක්සිය වෙත ධාරක නාමයක් ලෙසම යවනු ලැබේ. මෙම scheme මාරු කිරීමෙන් curl හි මෙන් දේශීය සහ දුරස්ථ DNS අතර මාරු වීමක් සිදු නොවේ.
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 ප්රොක්සි ලැයිස්තුවෙන් බැලිය හැක. උදාහරණය net/http හිම transport භාවිත කරයි; වෙනත් Go පුස්තකාලයක් වෙනස් හැසිරීමක් ක්රියාත්මක කළ හැක.
එහෙත් නාම දෙකක් වෙන්කර හඳුනාගත යුතුය. සංඛ්යාත්මක ප්රොක්සි ලිපිනයකට ප්රොක්සි ධාරක නාමය සෙවීම අවශ්ය නොවේ; නාමයකින් දක්වා ඇති ප්රොක්සියක් SOCKS ඉල්ලීම යැවීමට පෙර දේශීයව සොයාගත යුතුය. සංඛ්යාත්මක ගමනාන්තයකට විසඳීමට ඉලක්ක නාමයක් නැති බැවින් ධාරක නාම හැසිරවීම එයින් පෙන්විය නොහැක. SOCKS හි සැබෑ තේරීම පරීක්ෂා කිරීමට ගමනාන්ත ක්ෂේත්රයේ නාමයක්ද ලිපිනයක්ද ඇති බව බලන්න.
සම්මත transport මගින් http, https, socks5 සහ socks5h ප්රොක්සි scheme සඳහා සහාය දක්වයි. සාමාන්ය SOCKS ලේබලයක් තිබීමෙන් අන්ත ලක්ෂ්යය SOCKS5 සඳහා සහාය දක්වන බව තහවුරු නොවේ. මෙම උදාහරණය TCP හරහා HTTP යවන අතර වෙනත් SOCKS විධාන හෝ UDP relay පරීක්ෂා නොකරයි.