• GO语言实现TCP端口转发


    package main
    
    import (
    	"fmt"
    	"log"
    	"net"
    )
    
    func main() {
    	//源端口,目的端口
    	var fromport, toport int = 2222, 88
    	fromaddr := fmt.Sprintf("127.0.0.1:%d", fromport)
    	toaddr := fmt.Sprintf("127.0.0.1:%d", toport)
    
    	fromlistener, err := net.Listen("tcp", fromaddr)
    
    	if err != nil {
    		log.Fatal("Unable to listen on: %s, error: %s
    ", fromaddr, err.Error())
    	}
    	defer fromlistener.Close()
    
    	for {
    		fromcon, err := fromlistener.Accept()
    		if err != nil {
    			fmt.Printf("Unable to accept a request, error: %s
    ", err.Error())
    		} else {
    			fmt.Println("new connect:" + fromcon.RemoteAddr().String())
    		}
    
    		//这边最好也做个协程,防止阻塞
    		toCon, err := net.Dial("tcp", toaddr)
    		if err != nil {
    			fmt.Printf("can not connect to %s
    ", toaddr)
    			continue
    		}
    
    		go handleConnection(fromcon, toCon)
    		go handleConnection(toCon, fromcon)
    
    	}
    
    }
    
    func handleConnection(r, w net.Conn) {
    	defer r.Close()
    	defer w.Close()
    
    	var buffer = make([]byte, 100000)
    	for {
    		n, err := r.Read(buffer)
    		if err != nil {
    			break
    		}
    
    		n, err = w.Write(buffer[:n])
    		if err != nil {
    			break
    		}
    	}
    
    }
    

      

    参考链接:GO语言实现TCP端口转发【代码】_苏南生的CSDN博客-CSDN博客

  • 相关阅读:
    Oracle:解锁scott用户及设置密码
    js生成条形码
    返回头部效果
    密码强度
    事件委托小效果
    圆形导航效果
    进度条效果
    标题跟随效果
    随机抽人小效果
    点击创建效果
  • 原文地址:https://www.cnblogs.com/nihaorz/p/14339075.html
Copyright © 2020-2023  润新知