golang实现tcp转发代理的方法

  

<强>我就废话不多说了,直接上代码吧:

        主要包      导入(   “国旗”   “fmt”   “输入输出”   “净”   “操作系统”   “弦”   “同步”   )      var锁sync.Mutex   var trueList[]字符串   var ip字符串   var列表字符串      函数main () {   flag.StringVar(和ip、“l”“: 9897”,“- l=0.0.0.0:9897指定服务监听的端口”)   flag.StringVar(和列表,“d”,“127.0.0.1:1789 127.0.0.1:1788”,“- d=127.0.0.1:1789 127.0.0.1:1788指定后端的IP和端口,多个用”、“隔”开)   flag.Parse ()   trueList=字符串。分割(列表,",")   如果len (trueList) & lt;=0 {   fmt.Println(“后端IP和端口不能空,或者无效”)   os.Exit (1)   }   服务器()   }      func服务器(){   lis,犯错:=净。听(“tcp ip)   如果犯错!=nil {   fmt.Println (err)   返回   }   推迟lis.Close ()   为{   康涅狄格州,犯错:=lis.Accept ()   如果犯错!=nil {   fmt。Println(“建立连接错误:% v \ n”,呃)   继续   }   conn.LocalAddr fmt.Println (conn.RemoteAddr () ()   去处理(康涅狄格州)   }   }      函数句柄(sconn net.Conn) {   推迟sconn.Close ()   ip,好:=getIP ()   如果!好{   返回   }   dconn犯错:=净。刻度盘(“tcp ip)   如果犯错!=nil {   fmt。Printf("连接% v失败:% v \ n”, ip,犯错)   返回   }   ExitChan:=(陈bool, 1)   func (sconn网。康涅狄格州,dconn净。康涅狄格州,退出陈bool) {   _,犯错:=io。复制(dconn sconn)   fmt。Printf("往% v发送数据失败:% v \ n”, ip,犯错)   ExitChan & lt; -真的   }(sconn dconn ExitChan)   func (sconn网。康涅狄格州,dconn净。康涅狄格州,退出陈bool) {   _,犯错:=io。复制(sconn dconn)   fmt。Printf("从% v接收数据失败:% v \ n”, ip,犯错)   ExitChan & lt; -真的   }(sconn dconn ExitChan)   & lt; -ExitChan   dconn.Close ()   }      func getIP()(字符串,bool) {   lock.Lock ()   推迟lock.Unlock ()      如果len (trueList) & lt;1) {   返回",假的   }   知识产权:=trueList [0]   trueList=append (trueList [1:], ip)   返回的ip,真   }   之前      

以上这篇golang实现tcp转发代理的方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。

golang实现tcp转发代理的方法