Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Menggunakan proksi socks5 go

Menggunakan proksi socks5 go

WBOY
WBOYke hadapan
2024-02-09 09:45:10848semak imbas

Menggunakan proksi socks5 go

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.

Kandungan soalan

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

Penyelesaian

Bunyi seperti anda mahu ini:

  1. Alat yang mendengar pada komputer tempatan anda pada port tertentu menggunakan TCP
  2. Anda boleh membuat permintaan protokol ocks5 ke port ini dan ia harus memajukan semuanya ke pelayan socks5 lain pada mesin jauh yang lain.
  3. Pelayan socks5 bertanggungjawab untuk mewujudkan sambungan dengan sasaran dalam permintaan protokol socks5

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

Kod semasa anda akan berfungsi untuk sebahagian besar, dengan pengecualian bahawa anda harus menggunakan 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!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam