c# 实现端口转发可以用来实现远程桌面连接内网主机
2016-10-29 20:02
776 查看
gYP.Start()方法调用后填写一台公网主机ip和端口(11111)然后公网主机用lcx转发11111到22222端口,远程桌面在公网主机连自己(127.0.0.1:22222)的22222端口就可以了可能需要点2次连接
protected void wDZ(object sender, EventArgs e) { if (iXdh.Text == "" || eEpm.Text.Length < 7 || ZHS.Text == "") return; PortForward gYP = new PortForward(); gYP.Start(llH.Text, int.Parse(ZHS.Text), eEpm.Text, int.Parse(iXdh.Text)); } protected void vJNsE(object sender, EventArgs e) { PortForward gYP = new PortForward(); gYP.lyTOK(); } protected void tYoZ(object sender, EventArgs e) { } } public class PortForward { public string Localaddress; public int LocalPort; public string RemoteAddress; public int RemotePort; string type; Socket ltcpClient; Socket rtcpClient; Socket server; byte[] DPrPL = new byte[2048]; byte[] wvZv = new byte[2048]; public struct session { public Socket rdel; public Socket ldel; public int llen; public int rlen; } public static IPEndPoint mtJ(string host, int port) { IPEndPoint iep = null; IPHostEntry aGN = Dns.Resolve(host); IPAddress rmt = aGN.AddressList[0]; iep = new IPEndPoint(rmt, port); return iep; } public void Start(string Rip, int Rport, string lip, int lport) { try { LocalPort = lport; RemoteAddress = Rip; RemotePort = Rport; Localaddress = lip; rtcpClient = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); ltcpClient = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); rtcpClient.BeginConnect(mtJ(RemoteAddress, RemotePort), new AsyncCallback(iiGFO), rtcpClient); } catch (Exception ex) { } } protected void iiGFO(IAsyncResult ar) { try { session RKXy = new session(); RKXy.ldel = ltcpClient; RKXy.rdel = rtcpClient; ltcpClient.BeginConnect(mtJ(Localaddress, LocalPort), new AsyncCallback(VTp), RKXy); } catch (Exception ex) { } } protected void VTp(IAsyncResult ar) { try { session RKXy = (session)ar.AsyncState; ltcpClient.EndConnect(ar); RKXy.rdel.BeginReceive(DPrPL, 0, DPrPL.Length, SocketFlags.None, new AsyncCallback(LFYM), RKXy); RKXy.ldel.BeginReceive(wvZv, 0, wvZv.Length, SocketFlags.None, new AsyncCallback(xPS), RKXy); } catch (Exception ex) { } } private void LFYM(IAsyncResult ar) { try { session RKXy = (session)ar.AsyncState; int Ret = RKXy.rdel.EndReceive(ar); if (Ret > 0) ltcpClient.BeginSend(DPrPL, 0, Ret, SocketFlags.None, new AsyncCallback(JTcp), RKXy); else lyTOK(); } catch (Exception ex) { } } private void JTcp(IAsyncResult ar) { try { session RKXy = (session)ar.AsyncState; RKXy.ldel.EndSend(ar); RKXy.rdel.BeginReceive(DPrPL, 0, DPrPL.Length, SocketFlags.None, new AsyncCallback(this.LFYM), RKXy); } catch (Exception ex) { } } private void xPS(IAsyncResult ar) { try { session RKXy = (session)ar.AsyncState; int Ret = RKXy.ldel.EndReceive(ar); if (Ret > 0) RKXy.rdel.BeginSend(wvZv, 0, Ret, SocketFlags.None, new AsyncCallback(IZU), RKXy); else lyTOK(); } catch (Exception ex) { } } private void IZU(IAsyncResult ar) { try { session RKXy = (session)ar.AsyncState; RKXy.rdel.EndSend(ar); RKXy.ldel.BeginReceive(wvZv, 0, wvZv.Length, SocketFlags.None, new AsyncCallback(this.xPS), RKXy); } catch (Exception ex) { } } public void lyTOK() { try { if (ltcpClient != null) { ltcpClient.Close(); } if (rtcpClient != null) rtcpClient.Close(); } catch (Exception ex) { } } } }
相关文章推荐
- 利用路由器端口转发实现远程桌面访问内网某台机器
- 网络判断网络连接有多种办法,通过C#程序也可以判断与远程主机的连接状态。具体实现方法
- 利用灵雀云免费主机做反向ssh端口转发,实现内网服务器的外网访问_20160107_七侠镇莫小贝
- 使用Remote Desktop organizer远程桌面管理工具连接服务器不能实现真机与被远程主机之间的文件拖拉复制
- 利用灵雀云免费主机做反向ssh端口转发,实现内网服务器的外网访问_20160107_七侠镇莫小贝
- plink+批处理+vbs实现ssh远程端口转发后台运行断点连接(windows下)
- 远程控制桌面,手机外网远程桌面连接内网的实现过程,详细图文并茂
- NAT对于网络上的其它人都不可见(但可以转发端口),Bridged和网络里的其它物理机没区别,Internal只能在虚拟机之间可见,Host-only只对主机可见(最符合我的服务器需求),最多可设置8块网卡实现混杂
- 远程桌面连接的开启,和借助内外网软件,实现外网PC手机远程控制内网电脑,详细图文教程
- 路由器_内网端口映射,nat_端口映射_工具_软件_远程桌面_连接_端口_花生壳_个人_FTP_服务器_WEB站点
- vs2010 c#调用mstscax.dll实现远程桌面连接
- 使用plink以及ssh转发连接到局域网内的远程桌面或其它端口
- C#怎样实现远程连接SQLServer2005
- 如何实现Windows 2003远程桌面Web 连接
- C#怎样实现远程连接SQL Server2005
- c#使用多个远程桌面连接
- C# 网络营销 - c#可以实现连接和断开宽带的拨号程序吗?
- windows 2003 server 记录远程桌面的连接登录日志和修改3389连接端口方法
- 更改远程桌面默认端口3389及删除远程桌面连接历史记录
- 用vnc实现windows远程连接linux桌面