从口X到计算机B与C#“UDP打孔到防火墙”转发流量

我需要建立一个从我家的电脑到我的办公室的电脑建立TCP连接。

在办公室则有时几个计算机连接到一个路由器。 该路由器具有上网,因此所有连接到该路由器的计算机有互联网以及。 在我的房子我有上网的电脑。 我需要我的办公室的电脑作为服务器,我家里的电脑连接到它。 之前,我曾经是能够通过端口转发通信连接的服务器作为:

NATUPNPLib.UPnPNATClass upnpnat; NATUPNPLib.IStaticPortMappingCollection mappings; public ServerExample() { InitializeComponent(); upnpnat = new NATUPNPLib.UPnPNATClass(); mappings = upnpnat.StaticPortMappingCollection; // server local IP address mappings.Add(1300, "TCP", 1300, "192.168.150.146", true, "plsease work"); // this code tels the router to forward all tcp traffic comming from port // 1300 to the server computer (it's lan ip address happens to be 192.168.150.146) //...

我能够从我家连接。 (我知道简单的方法将是打开办公室路由器上的端口,并转发到我的电脑的问题是,我没有进入办公室路由器)

现在,他们更换了路由器上我办公室用较新的,我不能用我的code.Now,用新的路由器,当我执行的代码privious我得到:

从口X到计算机B与C#“UDP打孔到防火墙”转发流量


注意,映射返回null; 因此,我不能够添加映射。

我相信有应该是建立在办公室使用的LimeWire例如或位洪流因为有些人的连接方式。 我想我的问题有可能的权限呢? 我怎样才能解决这个问题?


编辑

因此,从研究我发现,我所要做的是“UDP打孔到防火墙”。 其实我是想做到这一点通过TCP连接。 我不知道什么是将TCP和UPD普赫入座的区别....我的意思是这样做的目的是为一个客户端能够找到一个梨,而无需在路由器上配置。

UPDATE

行,所以我相信我已经尝试在做什么张贴在用C#这个问题你们:好让我告诉你我做了什么:

注意:您可能需要参考此图以了解我是什么解释: 从口X到计算机B与C#“UDP打孔到防火墙”转发流量


正如你知道我要建立计算机A和计算机B之间的TCP连接,我能做到这一点的方法是做什么叫做TCP冲入座。

第1步:我做的第一件事是开始监听服务器S上新的连接

TcpListener server = new TcpListener(System.Net.IPAddress.Parse(“192.168.11.109”), 55550); Server.Start(); var client = server.AcceptSocket(); \\ wait here until someone connects

第2步:现在连接到计算机A作为服务器:

TcpClient tcpClient = new TcpClient("192.168.11.109", 55550);

第3步:在计算机A上执行步骤2的代码服务器S调试应该像后:

从口X到计算机B与C#“UDP打孔到防火墙”转发流量


步骤4:现在我们的目标是从计算机B连接到计算机A.服务器S具有其中的B,以建立连接所需的信息。 在现实中,我将不得不建立计算机B和服务器秒之间的连接,以便服务器S能够给B中的相应的参数,以便对B连接到A.

第5步:因为我debuging我能看到的参数,所以我将计算机中的一台服务器现在监听端口3313我想电脑A到现在端口(3313)上倾听,因为所有的包发送到路由器X具有端口3313应该被发送到计算机A.

\\ COMPUTER A TcpListener server = new TcpListener(System.Net.IPAddress.Parse("192.168.0.120"), 3313); server.Start(); var newClient = server.AcceptSocket(); \\ wait here until a client gets connected

第6步:所以,计算机A现在应当是侦听端口3313端口再新的3313连接,因为路由器X应该从转发端口到计算机A.收到的所有包是非常重要的

计算机A正在等待新的连接。 从口X到计算机B与C#“UDP打孔到防火墙”转发流量


步骤7:所以现在赶快行动吧! 我们要建立从计算机B.该连接在现实中服务器的意志传递参数,但由于我只是想使这项工作,我会写程序计算机B上的真快

TcpClient tcpClient = new TcpClient(“192.168.11.108”, 3313); \\192.168.11.108 is the address of router X

最后:

出于某种原因,计算机B不能够连接到计算机A.

从口X到计算机B与C#“UDP打孔到防火墙”转发流量


之所以说它是无法连接,因为路由器X不转发包到计算机A(我知道这是因为我在路由器X启用端口转发,端口54540,当我使用该端口它的作品),我的意思是我不明白为什么路由器X没有向前来港从3313到计算机A.计算机A的流量已经建立到服务者S的连接,为什么所有的服务者S通过端口3313发送到路由器X的事情得到了发送给计算机A.它说,如果我通过端口发送3313包路由器X自己不要被电脑接收的!?

PS:

需要注意的是一切,我发现在这里,我居然有三台路由器X,Y和Z也是我的服务器S,计算机A和计算机B:

从口X到计算机B与C#“UDP打孔到防火墙”转发流量


--------------解决方案-------------

您的新作品路由器可能得到UPnP禁用,因此您的空引用。

如果没有这个您的服务器不进行入站流量可见可以作为路由器不知道从哪里发送的报文。 在这种情况下,路由器作为防火墙阻止传入通信到服务器。

解决这个问题的基本方法是:

1)打开UPnP的

这使您的应用程序指示路由器如何转发入站流量回您的服务器。

2)建立一个端口转发

如上通过手动配置路由器。

3)使您的工作服务器的客户端

路由器允许出站连接启动连接工作。 它记住的返回地址,重写外部可见的IP,并提供了一​​个未使用的端口,用于外部通信交谈回(NAT)。 这使得出站请求建立通信与外部和绕过防火墙。 如果你家的IP是固定的,你可以安装在工作中的客户端试图给家里打电话的时间表(直到你启动服务器,并可以建立连接)。

4)使用P2P(中介服务器)

我不知道在那里你将与这个开头,但原理是这样的。 它通常工作单个UDP端口上。 这不是在NAT后面的服务器用于建立连接。 客户发送其IP到服务器在一个UDP包,且该路由器重写与路由器返回地址的UDP报头。 服务器接受该数据并将其发送给其他对等体。 随着现在每个人都知道对方的回复地址,就可以直接发送TCP流量,彼此闪开服务器的步骤。

这里也有一些真正的好文章在这里NAT方面的基础知识,深入浅出的解释。 而这里的好文章这也解释了P2P如何利用NAT来绕过防火墙。

希望这给你一些想法。

TCP打孔经常不起作用。 你最好的办法是坚持打洞。 如果您需要TCP类似的行为,你可以使用RDP或类似的协议,让您的TCP行为,但可以使用UDP作为传输。

另一种方法是通过服务器中继的所有通信。 每个主机可以连接到服务器和服务器可以从一个连接到另一个复制流量。

最好的解决办法是,如果你可以从路由器,如端口转发或UPnP的一些支持。

有一个关于UDP和TCP打孔技术的优秀文章。

http://www.brynosaurus.com/pub/net/p2pnat/

但是,你需要为这个打洞技术知名的交会服务器,我不认为你想设置。

顺便说一句,你将要仔细检查关于有在办公室自己的服务器公司的政策。 为了安全,我不认为一个公司允许员工设定自己的服务器内。

你可以写你自己的代理:

服务器:1300监听与连接,并在1301从B.连接保留两个连接的列表,当你有各自的至少一个,创建一个代理对象。 这时候你从的信号,你有一个连接,这可能是一个信号,字节或端口,甚至地址连接到B的连接。 之后,当你从A获取数据,将其发送给B.当你从B数据,发送给A.

计算机B:程序维护服务器上的端口1301连接。 如果连接不断下降,重新建立它。 当您收到的信号(可能有地址和端口或只是一个“我的连接”字节),创建所需端口的连接,并存储在一个代理对象的两个连接。 当从一个接收的数据,将其发送给另一方。 由于您使用该连接,建立服务器的端口1301建立新连接来处理更多。

你必须处理当然掉线,B和服务器将帮助之间的常开挂起的连接之间发送保持活跃信号。

下面是我写了很久以前做代理的样本类。 我没有时间把它清理干净,但如果你看到TcpProxy那就是接受连接父类,客户接受的连接和RemoteEndPoint是终点连接。 它也将数据写入到文件中,确实可以忽略一些其他的东西。

分类:C# 时间:2015-03-15 人气:0
本文关键词: 网络,TCP,portforwarding
分享到:

相关文章

Copyright (C) 55228885.com, All Rights Reserved.

55228885 版权所有 京ICP备15002868号

processed in 0.734 (s). 10 q(s)