• go 端口转发 代理 --chatGPT


    问:changePort(A,B) 实现 将A端口转发到B
    gpt:

    要实现端口转发,可以使用 Go 语言的 `net` 包来创建一个简单的端口转发程序。以下是一个示例:

    ```go
    package main

    import (
        "fmt"
        "net"
        "os"
    )

    func main() {
        if len(os.Args) != 3 {
            fmt.Println("用法: ./portforward <本地端口> <目标地址:目标端口>")
            return
        }

        localPort := os.Args[1]
        remoteAddr := os.Args[2]

        // 创建本地监听
        localListener, err := net.Listen("tcp", "localhost:"+localPort)
        if err != nil {
            fmt.Println("无法监听端口:", err)
            return
        }
        defer localListener.Close()

        fmt.Printf("开始将本地端口 %s 转发到 %s\n", localPort, remoteAddr)

        for {
            // 等待本地连接
            localConn, err := localListener.Accept()
            if err != nil {
                fmt.Println("本地连接错误:", err)
                continue
            }

            // 启动 goroutine 处理转发
            go forward(localConn, remoteAddr)
        }
    }

    func forward(localConn net.Conn, remoteAddr string) {
        // 连接远程服务器
        remoteConn, err := net.Dial("tcp", remoteAddr)
        if err != nil {
            fmt.Println("无法连接到远程服务器:", err)
            localConn.Close()
            return
        }
        defer remoteConn.Close()

        // 启动 goroutine 处理从本地到远程的数据传输
        go func() {
            _, err := io.Copy(remoteConn, localConn)
            if err != nil {
                fmt.Println("本地到远程传输错误:", err)
            }
        }()

        // 处理从远程到本地的数据传输
        _, err = io.Copy(localConn, remoteConn)
        if err != nil {
            fmt.Println("远程到本地传输错误:", err)
        }
    }
    ```

    这个程序通过命令行参数接收本地端口和目标地址(包括目标主机和端口),然后创建一个本地监听器以接收传入的连接。每当有连接到达时,它将启动一个 goroutine 来处理数据传输,将本地端口的数据转发到目标地址上的端口,同时处理从远程到本地的数据传输。

    你可以在命令行中运行这个程序,如下所示:

    ```shell
    ./portforward 8080 target.com:80
    ```

    这将会将本地端口 8080 转发到目标主机 `target.com` 的端口 80。你可以根据需要修改本地端口和目标地址。请注意,这只是一个简单的示例,实际的端口转发可能需要更多的配置和安全性措施。

  • 相关阅读:
    MapReduce 机理
    IntelliJ IDEA中Terminal终端下无法使用的问题
    基于react-markdown组件自定义一个Markdown显示器
    渗透工具---BurpSuite 插件开发之HelloWorld
    Shannon理论
    C学生管理系统 指定位置插入学生节点
    docker服务CPU飙高排查
    LeetCode-77-组合
    zabbix监控nginx
    专访D-Wave CEO:量子计算的过去、现在和未来
  • 原文地址:https://blog.csdn.net/glc22/article/details/133384977