福利:go语言开发的sock5代理服务器

本文分享了一款经过亲测的Go语言开发的Sock5代理服务器,推荐了sockSCAP下载链接,方便读者进行测试和使用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

亲测好用

package main

import (
    "io"
    "log"
    "net"
    "strconv"
)

func main() {
    log.SetFlags(log.LstdFlags | log.Lshortfile)
    l, err := net.Listen("tcp", ":8081")
    if err != nil {
        log.Panic(err)
    }

    for {
        client, err := l.Accept()
        if err != nil {
            log.Panic(err)
        }

        go handleClientRequest(client)
    }
}

func handleClientRequest(client net.Conn) {
    if client == nil {
        return
    }
    defer client.Close()

    var b [1024]byte
    n, err := client.Read(b[:])
    if err != nil {
        log.Println(err)
        return
    }

    if b[0] == 0x05 { //只处理Socks5协议
        //客户端回应:Socks服务端不需要验证方式
        client.Write([]byte{0x05, 0x00})
        n, err = client.Read(b[:])
        var host, port string
        switch b[3] {
        case 0x01: //IP V4
            host = net.IPv4(b[4], b[5], b[6], b[7]).String()
        case 0x03: //域名
            host = string(b[5 : n-2]) //b[4]表示域名的长度
        case 0x04: //IP V6
            host = net.IP{b[4], b[5], b[6], b[7], b[8], b[9], b[10], b[11], b[12], b[13], b[14], b[15], b[16], b[17], b[18], b[19]}.String()
        }

        port = strconv.Itoa(int(b[n-2])<<8 | int(b[n-1]))
        server, err := net.Dial("tcp", net.JoinHostPort(host, port))
        if err != nil {
            log.Println(err)
            return
        }
        defer server.Close()
        client.Write([]byte{0x05, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00}) //响应客户端连接成功
        //进行转发
        go io.Copy(server, client)
        io.Copy(client, server)
    }

}

下载sockSCAP
测试一下吧,
https://download.youkuaiyun.com/download/huyongtq/10604485

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值