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; }
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); } }
public Thread StartPortForwarding(int localPort, IPAddress targetAddress, int targetPort, PortForwardingOptionEnum portForwardingOption) { return this.StartPortForwarding(IPAddress.Any, localPort, targetAddress, targetPort, portForwardingOption); }
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; }
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; }
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; } }
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; } }
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(); } } } }