golang 简单tcp代理实现

本文介绍了如何使用Golang语言实现一个简单的TCP代理,通过参考文献可以深入理解其工作原理和技术细节。

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

package main
import (
        "net"
        "fmt"
        "io"
        "os"
)
func main() {
        if len(os.Args) != 3 {
                fatal("usage: netfwd local remote")
        }
        localAddr := os.Args[1]
        remoteAddr := os.Args[2]
        local, err := net.Listen("tcp", localAddr)
        if local == nil {
                fatal("cannot listen: %v", err)
        }
        for {
                conn, err := local.Accept()
                if conn == nil {
                        fatal("accept failed: %v", err)
                }
                go forward(conn, remoteAddr)
        }
}

func forward(local net.Conn, remoteAddr string) {
        remote, err := net.Dial("tcp", remoteAddr)
        if remote == nil {
                fmt.Fprintf(os.Stderr, "remote dial failed: %v\n", err)
                return
        }

        go func() {
            io.Copy(local, remote)
            local.Close()
            remote.Close()
        }()

        go func() {
            io.Copy(remote, local)
            remote.Close()
            local.Close()
        }()
}

func fatal(s string, a ... interface{}) {
        fmt.Fprintf(os.Stderr, "netfwd: %s\n", fmt.Sprintf(s, a))
        os.Exit(2)
}

参考文献

Simple GO TCP proxy

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值