コード例 #1
0
ファイル: TCPServer.go プロジェクト: kolonse/TCPProxy
func (si *ServerInfo) channelConn(conn *t.TCPConn) {
	// 收到隧道的连接
	KolonseWeb.DefaultLogs().Info("收到隧道连接 Remote:%v Local:%v",
		conn.RemoteAddr().String(),
		conn.LocalAddr().String())
	si.Cache = []byte("")
}
コード例 #2
0
ファイル: TCPServer.go プロジェクト: kolonse/TCPProxy
func (si *ServerInfo) serverRecv(conn *t.TCPConn, buff []byte, err error) {
	// 收到用户数据
	if err != nil {
		pp := kdp.NewKDP()
		pp.Add("Method", "Close").
			Add("RemoteAddr", conn.RemoteAddr().String()).
			Stringify()
		// 将数据发送出去
		_, err := si.ChannelConn.conn.Write(pp.GetBuff())
		if err != nil {
			KolonseWeb.DefaultLogs().Error("服务连接 Addr r_%v|l_%v Error:%v",
				conn.RemoteAddr(),
				conn.LocalAddr(),
				err.Error())
		}
		delete(si.Parters, conn.RemoteAddr().String())
		return
	}
	KolonseWeb.DefaultLogs().Info("服务连接 Addr r_%v|l_%v 收到数据,size:%v",
		conn.RemoteAddr(),
		conn.LocalAddr(),
		len(buff))
	pp := kdp.NewKDP()
	pp.Add("Method", "REQ").
		Add("RemoteAddr", conn.RemoteAddr().String()).
		StringifyBody(buff).
		Stringify()
	fmt.Println("SEND:\n" + pp.HeaderString() + "\n")
	// 将数据发送出去
	if si.ChannelConn.conn == nil {
		KolonseWeb.DefaultLogs().Error("服务连接 Addr r_%v|l_%v Error:%v",
			conn.RemoteAddr(),
			conn.LocalAddr(),
			"隧道连接不存在")
		conn.Close()
		return
	}
	_, err = si.ChannelConn.conn.Write(pp.GetBuff())
	if err != nil {
		KolonseWeb.DefaultLogs().Error("服务连接 Addr r_%v|l_%v Error:%v",
			conn.RemoteAddr(),
			conn.LocalAddr(),
			err.Error())
		return
	}
}
コード例 #3
0
ファイル: TCPServer.go プロジェクト: kolonse/TCPProxy
func (si *ServerInfo) serverConn(conn *t.TCPConn) {
	// 收到用户数据的连接
	KolonseWeb.DefaultLogs().Info("收到服务连接 Remote:%v Local:%v",
		conn.RemoteAddr().String(),
		conn.LocalAddr().String())
	who := Who{}
	who.SetConn(conn.Conn)
	si.Parters[conn.RemoteAddr().String()] = who
}
コード例 #4
0
ファイル: TCPServer.go プロジェクト: kolonse/TCPProxy
func (si *ServerInfo) ProcessProtoRes(conn net.Conn, pp *kdp.KDP) {
	remoteAddr, ok := pp.Get("RemoteAddr")
	if !ok {
		//  连接已经不存在 通知客户端关闭连接
		KolonseWeb.DefaultLogs().Error("协议不存在 RemoteAddr", remoteAddr)
		return //
	}
	pWho, ok := si.Parters[remoteAddr]
	if !ok {
		//  连接已经不存在 通知客户端关闭连接
		KolonseWeb.DefaultLogs().Error("RemoteAddr:%v not found", remoteAddr)
		return //
	}
	// 发送消息
	KolonseWeb.DefaultLogs().Info("向请求源 %v 发送数据,长度:%v",
		conn.RemoteAddr().String(),
		len(pp.GetBody()))
	pWho.conn.Write(pp.GetBody())
}
コード例 #5
0
ファイル: TCPServer.go プロジェクト: kolonse/TCPProxy
func (si *ServerInfo) ProcessProtoConn(conn net.Conn, pp *kdp.KDP) {
	// 将连接信息进行赋值
	connInfo := make(map[string]string)
	json.Unmarshal(pp.GetBody(), &connInfo) // 读取出连接时填写的 name 字段
	KolonseWeb.DefaultLogs().Info("收到连接请求数据 Remote:%v Local:%v info:%v",
		conn.RemoteAddr().String(),
		conn.LocalAddr().String(),
		string(pp.GetBody()))
	si.ChannelConn.SetConn(conn)
}
コード例 #6
0
ファイル: TCPServer.go プロジェクト: kolonse/TCPProxy
func (si *ServerInfo) channelRecv(conn *t.TCPConn, buff []byte, err error) {
	if err != nil {
		// 关闭所有的服务连接
		for _, value := range si.Parters {
			value.conn.Close()
		}
		// 关闭当前的监听连接
		si.Channel.Stop()
		si.Server.Stop()
		//conn.Close()
		KolonseWeb.DefaultLogs().Error("隧道连接 Addr r_%v|l_%v Error:%v", conn.RemoteAddr(), conn.LocalAddr(), err.Error())
		return
	}
	KolonseWeb.DefaultLogs().Info("Addr r_%v|l_%v 收到隧道数据,长度:%v", conn.RemoteAddr(), conn.LocalAddr(), len(buff))
	si.Cache = append(si.Cache, buff...)
	for {
		pp := kdp.NewKDP()
		Err := pp.Parse(si.Cache).GetError()
		if Err.GetCode() == kdp.KDP_PROTO_ERROR_LENGTH {
			KolonseWeb.DefaultLogs().Warn("Addr r_%v|l_%v Warn:%v", conn.RemoteAddr(), conn.LocalAddr(), Err.Error())
			return
		} else if Err.GetCode() != kdp.KDP_PROTO_SUCCESS {
			KolonseWeb.DefaultLogs().Error("Addr r_%v|l_%v Buff:%v Error:%v", conn.RemoteAddr(), conn.LocalAddr(), string(buff), Err.Error())
			conn.Close()
			return
		}
		switch method, _ := pp.Get("Method"); method { // 处理协议
		case "CONN":
			si.ProcessProtoConn(conn.Conn, pp)
		case "RES":
			si.ProcessProtoRes(conn.Conn, pp)
		case "Close":
			si.ProcessProtoClose(conn.Conn, pp)
		}

		si.Cache = si.Cache[pp.GetProtoLen():]
		if len(si.Cache) == 0 {
			break
		}
	}
}
コード例 #7
0
ファイル: RTCPProxyServer.go プロジェクト: kolonse/TCPProxy
func main() {
	svcConfig := &service.Config{
		Name:        "RTCPProxyServer",
		DisplayName: "逆向TCP代理服务",
		Description: "主要用来处理第三方回调的问题 方便调试",
	}

	prg := &program{}
	s, err := service.New(prg, svcConfig)
	if err != nil {
		KolonseWeb.DefaultLogs().Error(err.Error())
	}
	logger, err := s.Logger(nil)
	if err != nil {
		KolonseWeb.DefaultLogs().Error(err.Error())
	}
	err = s.Run()
	if err != nil {
		logger.Error(err)
	}
}
コード例 #8
0
ファイル: RTCPProxyServer.go プロジェクト: kolonse/TCPProxy
func (p *program) run() {
	// Do work here
	KolonseWeb.DefaultApp.Get("/RegisterProxy", func(req *HttpLib.Request, res *HttpLib.Response, next Type.Next) {
		port := req.URL.Query().Get("port") // 启动监听端口
		KolonseWeb.DefaultLogs().Info("处理客户端请求 Req Client Addr:%v Register Port:%v",
			req.RemoteAddr, port)
		// 创建一个TCP服务 然后启动
		portInt, _ := strconv.Atoi(port)
		ts := TCPServer.NewServerInfo()
		err := ts.Start(portInt)
		if err != nil {
			res.Json(NewRespProto(RPOXY_PROTO_ERROR_NET, err.Error(), nil)) // 返回服务状态

		} else {
			res.Json(NewRespProto(RPOXY_PROTO_SUCCESS, "", nil)) // 返回服务状态
		}
	})
	KolonseWeb.DefaultApp.Listen("0.0.0.0", *Port)
}