用nodejs实现反向代理远程桌面(外网连接局域网内机器实现远程)
原创文章,未经允许,请勿转载
这是nodejs的stream类的pipe方法的一个简单应用,pipe方法可以将一个stream流的数据直接传送到另一个stream流,而nodejs的socket是从stream类继承,所以socket也可以使用stream的pipe方法。 办公室的网络是局域网,如果想在家里连接办公室的电脑进行远程管理,通常有以下两种办法:
1、在办公室公网路由器上开放端口映射到该台电脑的ip,或者直接开启DMZ主机,让该台电脑的3389端口暴露到公网,在家通过获得办公室的公网IP地址来进行远程桌面连接。 2、通过第三方远程管理软件,比较好的而且免费的有:TeamViewer。
我实现的这种方式均不同上面两类,我称之为反向代理远程桌面:局域网那台电脑我先称之为机器A,家里需要一台外网可以访问的电脑称之为机器B。在机器A上开启客户端client,开启socket(称之为socketA1)连接机器B上的socket(称之为socketB1),如连接不通者间隔一段时间后再次尝试连接,直至连通。连通后机器A和机器B之间就可以通信了,机器A开启一个socket(称之为socketA2)连接本地的3389远程桌面端口。并将socketA1和socketA2用pipe连接起来:
socketA1.pipe(socketA2);
socketA2.pipe(socketA1);
两条tcp连接都连接以后,然后在机器B上开启一个socket(称之为socketB2),绑定到某个本地端口。并且使得socketB1和socketB2直接用pipe连通:
socketB1.pipe(socketB2);
socketB2.pipe(socketB1);
这样我们通过连接机器B的socketB2绑定的端口,两条tcp连接通信,使得数据最终流向机器A的3389端口。就可以连上位于局域网内的机器A的远程桌面了。
代码以及可运行程序下载:proxyrdp.zip (1.98m,包含node.exe)
如果不能下载请从googlecode下载: https://storage.googleapis.com/google-code-archive-downloads/v2/code.google.com/fastiny/proxyrdp.zip
请不要将程序放在目录包含中文的文件夹中运行 另外需要说明的是:提供下载代码里默认写的服务端地址是localhost,如果你在同一台电脑测试并登录的话,因为这样你试图通过本机的远程桌面客户端连接本机的远程桌面,那么会发生很恐怖的事情。。。你的电脑会黑屏!只能重启 ^_^ 。所以这就是为什么下面的截图只显示登录界面我没有登录的原因了。
来源:悠游悠游,原文地址:https://yymmss.com/p/proxyrdp.html