예제 #1
0
 public Thread StartPortForwarding(IPAddress localAddress, int localPort,
     IPAddress targetAddress, int targetPort, PortForwardingOptionEnum portForwardingOption)
 {
     TcpListener server = new TcpListener(localAddress, localPort);
     server.Start();
     var portForwardingThread = new Thread(delegate()
     {
         try
         {
             this.ForwardPort(server, targetAddress, targetPort, portForwardingOption);
         }
         catch (ThreadAbortException)
         {
             return;
         }
         catch (Exception ex)
         {
             Console.WriteLine(string.Format("Port foardwarding failure: {0}", ex.Message));
             Console.WriteLine(ex.StackTrace);
             Thread.CurrentThread.Abort();
         }
         finally
         {
             server.Stop();
         }
     });
     portForwardingThread.Start();
     return portForwardingThread;
 }
예제 #2
0
        public void ForwardPort(TcpListener server,
            IPAddress targetAddress, int targetPort, PortForwardingOptionEnum portForwardingOption)
        {
            while (true)
            {
                TcpClient sourceClient = server.AcceptTcpClient();
                TcpClient targetClient = null;
                try
                {
                    targetClient = new TcpClient();
                    targetClient.Connect(new IPEndPoint(targetAddress, targetPort));
                }
                catch
                {
                    sourceClient.Close();
                    throw;
                }

                this.StartPortForwarding(sourceClient, targetClient, portForwardingOption);
            }
        }
예제 #3
0
 public Thread StartPortForwarding(int localPort,
     IPAddress targetAddress, int targetPort, PortForwardingOptionEnum portForwardingOption)
 {
     return this.StartPortForwarding(IPAddress.Any, localPort, targetAddress, targetPort, portForwardingOption);
 }
예제 #4
0
 private Thread StartPortForwarding(NetworkStream sourceStream, NetworkStream targetStream, 
     PortForwardingOptionEnum portForwardingOption)
 {
     var portForwardingThread = new Thread(delegate()
     {
         try
         {
             this.ForwardPort(sourceStream, targetStream, portForwardingOption);
         }
         catch (ThreadAbortException)
         {
             return;
         }
         catch (Exception ex)
         {
             Console.WriteLine(string.Format("Port foardwarding failure: {0}", ex.Message));
             Console.WriteLine(ex.StackTrace);
             Thread.CurrentThread.Abort();
         }
     });
     portForwardingThread.Start();
     return portForwardingThread;
 }
예제 #5
0
 private Thread StartPortForwarding(TcpClient sourceClient, TcpClient targetClient, PortForwardingOptionEnum portForwardingOption)
 {
     var portForwardingThread = new Thread(delegate()
     {
         try
         {
             this.ForwardPort(sourceClient, targetClient, portForwardingOption);
         }
         catch (ThreadAbortException)
         {
             return;
         }
         catch (Exception ex)
         {
             Console.WriteLine(string.Format("Port foardwarding failure: {0}", ex.Message));
             Console.WriteLine(ex.StackTrace);
             Thread.CurrentThread.Abort();
         }
         finally
         {
             sourceClient.Close();
             targetClient.Close();
         }
     });
     portForwardingThread.Start();
     return portForwardingThread;
 }
예제 #6
0
 private PortForwardingOptionEnum GetInversePortForwardingOption(PortForwardingOptionEnum portForwardingOption)
 {
     switch (portForwardingOption)
     {
         case PortForwardingOptionEnum.Compress:
             return PortForwardingOptionEnum.Decompress;
         case PortForwardingOptionEnum.Decompress:
             return PortForwardingOptionEnum.Compress;
         case PortForwardingOptionEnum.None:
         default:
             return PortForwardingOptionEnum.None;
     }
 }
예제 #7
0
 private void ForwardPort(NetworkStream sourceStream, NetworkStream targetStream, PortForwardingOptionEnum portForwardingOption)
 {
     switch (portForwardingOption)
     {
         case PortForwardingOptionEnum.Compress:
             this.Compress(sourceStream, targetStream);
             break;
         case PortForwardingOptionEnum.Decompress:
             this.Decompress(sourceStream, targetStream);
             break;
         case PortForwardingOptionEnum.None:
         default:
             sourceStream.CopyTo(targetStream, this._bufferSize);
             break;
     }
 }
예제 #8
0
 private void ForwardPort(TcpClient sourceClient, TcpClient targetClient, PortForwardingOptionEnum portForwardingOption)
 {
     using (NetworkStream sourceStream = sourceClient.GetStream())
     {
         using (NetworkStream targetStream = targetClient.GetStream())
         {
             Thread portForwardingThreadRead = null;
             Thread portForwardingThreadWrite = null;
             if ((sourceStream.CanRead) && (targetStream.CanWrite))
             {
                 portForwardingThreadRead = this.StartPortForwarding(sourceStream, targetStream, portForwardingOption);
             }
             if ((sourceStream.CanWrite) && (targetStream.CanRead))
             {
                 portForwardingThreadWrite = this.StartPortForwarding(targetStream, sourceStream,
                     this.GetInversePortForwardingOption(portForwardingOption));
             }
             if (null != portForwardingThreadRead)
             {
                 portForwardingThreadRead.Join();
             }
             if (null != portForwardingThreadWrite)
             {
                 portForwardingThreadWrite.Join();
             }
         }
     }
 }