GO實現TCP端口轉發

1 . 導包
package main

import (
     "fmt"
     "net"
     "io"
)
2 . 全局變量
var (
	dst_addr string="127.0.0.1:8900"  //目標服務器地址
	local_addr string="0.0.0.0:8901"  //本地監聽地址
	)
3 . 轉發函數
func tcp_handle(tcpConn net.Conn){
	remote_tcp,err:=net.Dial("tcp",dst_addr) //連接目標服務器
    if err!=nil{
               fmt.Println(err)
 		       return
 		}
      go io.Copy(remote_tcp,tcpConn) 
	  go io.Copy(tcpConn,remote_tcp)
}
4 . 監聽函數
func tcp_listen(){
	ln,err:=net.Listen("tcp",local_addr)
	if err!=nil{
		fmt.Println("tcp_listen:",err)
		return
	}
	defer ln.Close()
	for {
		tcp_Conn,err:=ln.Accept() //接受tcp客戶端連接,並返回新的套接字進行通信
		if err!=nil{
			fmt.Println("Accept:",err)
			return
		}
		go tcp_handle(tcp_Conn)   //創建新的協程進行轉發
	}
}
5 . 主函數
func main(){
	fmt.Println("this is porxy server:")
	go tcp_listen()
	for{}  
}

運行圖

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章