Beispiel #1
0
        public static List <ConfigItem> GetData()
        {
            List <ConfigItem> data = new List <ConfigItem>();
            DataTable         dt   = MyManager.ListAllProxyServer();

            foreach (DataRow dr in dt.Rows)
            {
                ConfigItem  item   = new ConfigItem();
                ProxyServer entity = new ProxyServer();
                DbHelper.MapDataRowToObject(dr, entity);
                item.Entity = entity;
                if (isListening(entity.Id))
                {
                    item.StatusId = 1;
                }
                data.Add(item);
            }
            return(data);
        }
Beispiel #2
0
        public void work()
        {
            var _globalSrv      = MyManager.GetConfig("server").MyVal.Split(':');
            var globalUserToken = MyManager.GetConfig("usertoken").MyVal;
            var globalSrvIp     = _globalSrv[0];
            var globalSrvPort   = int.Parse(_globalSrv[1]);

            var srv = MyManager.GetProxyServer(Id);

            listener = new TcpListener(IPAddress.Any, srv.LocalPort);
            try
            {
                showMessage("开始监听" + srv.LocalPort);
                listener.Start(5);
            }
            catch
            {
                showMessage("监听出现错误");
                return;
            }

            showMessage("等待连接");
            while (!ShouldStop)
            {
                try
                {
                    var socket = listener.AcceptSocket();
                    showMessage("收到转发请求");
                    var client = new TcpClient();
                    showMessage("开始连接服务器," + globalSrvIp + ":" + globalSrvPort);
                    client.Connect(globalSrvIp, globalSrvPort);
                    var stream = client.GetStream();
                    showMessage("开始握手");
                    byte[] data = Encoding.UTF8.GetBytes("auth");
                    stream.Write(data, 0, data.Length);
                    byte[] receiveData = new byte[1024];
                    int    len         = stream.Read(receiveData, 0, receiveData.Length);
                    string str         = Encoding.UTF8.GetString(receiveData, 0, len);

                    bool working = false;
                    if (str == "ok")
                    {
                        showMessage("握手成功,开始认证");
                        data = Encoding.UTF8.GetBytes(guid + "," + globalUserToken + "," + srv.Server);
                        stream.Write(data, 0, data.Length);
                        len = stream.Read(receiveData, 0, receiveData.Length);
                        str = Encoding.UTF8.GetString(receiveData, 0, len);
                        if (str == "ok")
                        {
                            showMessage("认证成功,开始转发");
                            var    p   = new Tuple <Socket, NetworkStream>(socket, stream);
                            Thread ts1 = new Thread(new ParameterizedThreadStart(this.forward1));
                            ts1.IsBackground = true;
                            ts1.Start(p);
                            Thread ts2 = new Thread(new ParameterizedThreadStart(this.forward2));
                            ts2.IsBackground = true;
                            ts2.Start(p);
                            working = true;
                        }
                        else
                        {
                            showMessage("认证失败");
                        }
                    }
                    else
                    {
                        showMessage("握手失败");
                    }

                    if (!working)
                    {
                        socket.Close();
                        client.Close();
                    }
                }
                catch (Exception ex)
                {
                    showMessage("程序异常:" + ex.Message);
                }
            }

            if (listener != null)
            {
                listener.Stop();
                listener = null;
            }
        }