抱歉,长话短说,我试图保持清晰。
*一点背景*
作为项目的一部分,我们需要能够从具有有效IP地址的服务器上使用远程桌面(RDP)访问某些计算机(以下称为客户端)。这些客户端位于NAT之后(例如,在DSL Mode + Router后面),因此它们没有有效的IP地址,而Modem + Router却有。假设它们都在Windows 7 Ultimate上运行,并且没有防火墙,防病毒或任何阻止流量的内容。
* 至今 *
首先想到的也是最合乎逻辑的事情是使用调制解调器上的端口转发选项。但是,现实生活中的场景是这些客户端正在运行一个应用程序(使用C#编写,我们已经提供),并且我们需要该应用程序执行端口转发而不是调制解调器,因为在部署系统之后,我们赢得了不知道路由器的型号,配置等。此外,我们将无法访问调制解调器设置。因此,假定此选项不可用。
*对我们来说是可行的选择,当然还有问题!*
转到下一个使用反向隧道(又称为远程端口转发)的选项,我们将应用程序更改为创建2个套接字。On用于与客户端上的RDP服务器进行通信,另一个用于连接到服务器(一个具有有效IP)以建立隧道。在服务器上有另一个应用程序,该应用程序从客户端获取所有流量,并将其发送到远程桌面客户端(通过另一个套接字),反之亦然。所以架构看起来像:
|RDP SERVER|<->|Socket1|<->|Socket2|<->The Internet<->|Socket3|<->|Socket4|<->|RDP Client|
------------ Client side ---------- ------------- Server Side ----------
套接字1在客户端的端口17001上,并且与客户端(RDP服务器)的端口3389通信。
套接字2在客户端的端口17002上,并且与服务器的端口17002通信。
套接字3在服务器的端口17002上,并且与端口17002通信。客户端
Socket 4的端口位于服务器的端口17002上,并且与服务器的端口3389(RDP客户端)进行通信
从那时起,每当服务器上的用户想要与NAT后的客户端建立远程桌面连接时,他都将连接到套接字4,所有流量都重定向到套接字3,后者又将流量传输到套接字2和从插座2到插座1,反之亦然。
问题是,无论客户端和服务器如何连接,即使服务器和客户端位于彼此相邻的同一网络中,RDP向我询问客户端密码后,它也会随机执行以下操作之一:1 。有时它可以正常连接,我可以与计算机进行交互2.有时它在那里停止3.有时它进入并在显示它死去的客户端屏幕之前。
我检查了连接,更改了调制解调器,更改了客户端和服务器,但仍然相同。我什至在客户端(freesshd)上尝试了ssh服务器,并使用腻子将其转发到远程端口,结果是腻子发生奇怪的错误,导致连接断开。我开始拔头发了!有什么想法吗?
首先,谢谢大家不回答我的问题!它帮助我弄清楚出了什么问题。
我想在这里分享解决方案,以便其他人寻找类似问题的答案可能会有所想法。
答案 :
信不信由你,它与调试有关!!!发布此问题几天后,我发现如果不调试代码,它就可以正常工作。我的问题解决了,所以我不用再去想原因了。
但是,大约三天前,在编写必须与用户交互的Windows服务的过程中,我不小心碰到了一篇文章,这使我了解出了什么问题。
我越来越深入,发现当您开始远程连接时,您实际上是在开始一个新的会话。你猜怎么着?您的调试器已附加到在另一个Windows会话中运行的进程,因此视频渲染器未分配给新的会话,并且所有事情都会崩溃!
当然,这是我对问题的理解,但似乎揭示了奥秘!
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句