Apa yang akan diperkenalkan oleh editor PHP Youzi kepada anda hari ini ialah proksi socks5 yang dilaksanakan dalam bahasa Go. Semasa akses rangkaian, kami sering menghadapi situasi di mana kami perlu menyembunyikan alamat IP sebenar kami atau memintas blok rangkaian. Menggunakan proksi socks5 boleh membantu kami mencapai matlamat ini dengan mudah. Sebagai bahasa pengaturcaraan yang cekap dan ringkas, bahasa Go mempunyai pustaka rangkaian yang kaya dan ciri konkurensi, dan sangat sesuai untuk membangunkan alat proksi rangkaian. Seterusnya, kami akan memperkenalkan secara terperinci cara menulis pelayan proksi socks5 yang mudah dan praktikal menggunakan bahasa Go.
Saya ingin tahu sama ada anda boleh mendengar pada port tempatan, contohnya: 1080ocks5, dan mempunyai semua sambungan pada proksi port tersebut untuk menggunakan hos luaran: portsocks5
func main() { l, err := net.Listen("tcp", "127.0.0.1:1080") if err != nil { fmt.Print(err) } defer l.Close() for { conn, err := l.Accept() if err != nil { fmt.Print(err) } go handle(conn) } } func handle(conn net.Conn) { defer conn.Close() dialect, err := proxy.SOCKS5("tcp", "externalhost:externalport", nil, proxy.Direct) newConn, err := dialect.Dial("tcp", "targethost:targetport") if err != nil { log.Printf("Connection error: %s", err.Error()) } go func() { _, err = io.Copy(newConn, conn) if err != nil { log.Printf("Connection error: %s", err.Error()) } }() _, err = io.Copy(conn, newConn) if err != nil { log.Printf("Connection error: %s", err.Error()) } } func handle(conn net.Conn) { defer conn.Close() }
Saya perlu mendapatkan alamat destinasi dan mengesahkan sambungan adalah socks5, kemudian lakukan proksi menggunakan ip luaran dan hantar ke dialect.dial
Bunyi seperti anda mahu ini:
Dalam kes ini, anda hanya memerlukan proksi TCP asas. Alat anda tidak perlu melihat ke dalam permintaan socks5, dan juga tidak perlu disambungkan ke mesin jauh. Anda hanya mahu memajukan semua sambungan ke titik akhir setempat ke titik akhir jauh. proxy.SOCKS5
net.Dail
(bukannya dialect.Dail
) untuk menyambung ke "externalhost :externalport"
dan tidak perlu mencipta pendail . net.Dial
(而不是 dialect.Dial
)连接到 "externalhost:externalport"
,并且不需要创建 proxy.SOCKS5
Atas ialah kandungan terperinci Menggunakan proksi socks5 go. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!