首页 > 其他分享 >golang 打隧道和端口转发

golang 打隧道和端口转发

时间:2023-01-05 22:44:19浏览次数:31  
标签:log err 端口 golang ssh forwardConn 转发 conn

`package main

import (
"golang.org/x/crypto/ssh"
"io"
"log"
"net"
)

// main 万物的起源
func main() {
sshAddr := "000.00.000.00:22" // 服务器的 ip:ssh端口
sshUser := "root" // 用户名,可以新建一个特定用户
sshPasswd := "6666666.66666" // 密码
Remote := "127.0.0.1:3306" // 转发到远程的端口,未开放但是你想访问的端口
Listen := "127.0.0.1:3307" // 需要转发的本地端口,本地访问时使用的端口

serverClient, err := ssh.Dial("tcp", sshAddr, &ssh.ClientConfig{
    User:            sshUser,
    Auth:            []ssh.AuthMethod{ssh.Password(sshPasswd)},
    HostKeyCallback: ssh.InsecureIgnoreHostKey(),
})
if err != nil {
    log.Fatalf("ssh服务器连接异常: %s", err.Error())
}
defer serverClient.Close() // 程序执行完关闭连接,养成好习惯
log.Println("与服务器建立ssh连接成功啦")

// 监听本地映射端口 这样访问本地端口的时候我就可以发现啦
listener, err := net.Listen("tcp", Listen)
if err != nil {
    log.Fatalf(err.Error())
}
defer listener.Close() // 程序执行完关闭连接,养成好习惯

for {
    // 接收本地发送的数据
    conn, err := listener.Accept()
    if err != nil { // 养成好习惯处理错误
        log.Println(err)
        return
    }
    // 开启一个协程去处理这次的消息
    go func(conn net.Conn) {
        //建立ssh到后端服务的连接
        forwardConn, err := serverClient.Dial("tcp", Remote)
        if err != nil { // 养成好习惯处理错误
            log.Fatalln(err.Error())
        }
        log.Println("ssh端口映射隧道建立成功")
        defer forwardConn.Close() // 用完要关掉
        // 转发工作
        go io.Copy(forwardConn, conn) // 客户端发送给服务端的数据拷贝给服务端
        io.Copy(conn, forwardConn)    // 服务端发送给客户端的数据拷贝给客户端
    }(conn)
}

}
`

标签:log,err,端口,golang,ssh,forwardConn,转发,conn
From: https://www.cnblogs.com/gatling/p/17029053.html

相关文章

  • golang连接mysql操作示例增删改查
    golang本身没有提供连接mysql的驱动,但是定义了标准接口供第三方开发驱动。这里连接mysql可以使用第三方库,第三方库推荐使用https://github.com/Go-SQL-Driver/MySQL这个驱动......
  • golang go-sql-drive mysql连接池的实现
    ​​http://www.01happy.com/golang-go-sql-drive-mysql-connection-pooling/​​golang内部自带了连接池功能,刚开始接触golang的时候不了解这个,还自己搞了一个sql.Open的......
  • golang中tcp socket粘包问题和处理
    ​​http://www.01happy.com/golang-tcp-socket-adhere/​​在用golang开发人工客服系统的时候碰到了粘包问题,那么什么是粘包呢?例如我们和客户端约定数据交互格式是一个json......
  • Golang服务端开发及微服务架构
    ​​Go语言中使用panic和recover简化错误处理​​​​Go语言中的单元测试及反向代理​​​​Go获取命令行参数及信号量处理​​​​Go各种类型转换及函数的高级用法​​......
  • golang的AES加密
    AES常用的加解密的方式无非三种.对称加密,加解密都使用的是同一个密钥,其中的代表就是AES非对加解密,加解密使用不同的密钥,其中的代表就是RSA签名算法,如MD5、SH......
  • golang面向对象思想和实现
    golang中并没有明确的面向对象的说法,实在要扯上的话,可以将struct比作其它语言中的class。类声明typePoemstruct{TitlestringAuthorstringintrostring}这......
  • golang web开发获取get、post、cookie参数
    在成熟的语言java、python、php要获取这些参数应该来讲都非常简单,过较新的语言golang用获取这些个参数还是费了不少劲,特此记录一下。golang版本:1.3.1在贴代码之前如果能......
  • RSTP边缘端口开启的两种方式
    1、接口下开启边缘端口,但是边缘端口太多需要一个个的开启,工作量比较大。2、全局开启边缘端口,但是这样会形成环路,需要把连接交换的的接口,在接口下把边缘端口关闭。......
  • 在线客服系统的源码中Golang Gin框架实现IP白名单机制
    我的客服系统有一些接口是专门给内部调用的,只允许其他内部系统来调用,不允许随意访问,可以使用IP白名单机制使用Gin框架实现IP白名单机制可以使用中间件的方式实现。你......
  • Go语言(golang)开源项目大全
    ​​http://www.open-open.com/lib/view/open1396063913278.html#Compression​​内容目录​​Astronomy​​​​构建工具​​​​缓存​​​​云计算​​​​命令行选项解......