我想通过SSH从工作中访问我的家用电脑,但问题是我的家用电脑是在NAT路由器后面(我无法访问).因为我的工作计算机安装了CentOS并且位于代理之后,我无法使用TeamViwer(电视在Linux上移植了葡萄酒,显然代理设置不起作用).
有没有人知道一个适合我需要的程序?
谢谢,克劳迪
我开始探索使用p2p连接与其他连接的选项,所以我在JAVA中为Android设备编写了一个简单的套接字程序,其中用户可以共享简单的消息p2p(我当时对NAT没有任何想法).我了解了NAT,所以我现在需要与另一个用户建立TCP连接,该用户使用服务器进行发现,但有效载荷是p2p传输的.我也看了一下XMPP(协议如何工作的一个很好的和详细的说明是这里)和UPnP,但我不知道如何实现它们.
另一个有趣的问题是BitTorrent,因为它们可以在任何设备上工作,甚至可以在NAT后面工作.我无法解释BitTorrent的工作原理.
我研究了很多,但我被卡住了.
我的问题是:
我想在C#中进行TCP打孔(NAT Traversal).如果需要,可以使用集合服务器完成.我找到了http://sharpstunt.codeplex.com/但无法让它工作.理想情况下,我需要一些方法,我将一个端口号(int)作为参数,在NAT上调用此方法后可用("Port Forwarded").如果该方法只返回一些后来在NAT上可用的端口号,那也没关系.有没有人用C#做过这个?你能给我一些sharpstunt或其他东西的例子吗?
我们想在两个Android设备之间建立TCP/IP连接.目前我们认为如果我们将连接设备设置为设备会更简单.所以这两部手机之间没有服务器.
大多数时候(如果不是总是)一个人没有真正的IP地址(NAT等).这是创建TCP套接字的问题吗?我没有找到任何确切的信息.任何建议和意见将受到高度赞赏.
谢谢
我需要在两个用户之间建立P2P UDP和TCP连接.他们都是NAT的背后.
除了jSTUN之外是否有任何Java解决方案(库),它似乎只能在UDP上运行.而TURN,ICE对于对称NAT问题要好得多.
我正在尝试完成UDP打孔.我的理论基于这篇文章和WIKI页面,但我面临着C#编码的一些问题.这是我的问题:
使用此处发布的代码,我现在能够连接到远程计算机并在同一端口上侦听传入连接(将2个UDP客户端绑定到同一端口).
由于某种原因,对同一端口的两个绑定相互阻止接收任何数据.我有一个响应我的连接的UDP服务器,所以如果我在将任何其他客户端绑定到端口之前先连接到它,我会得到它的响应.
如果我将另一个客户端绑定到该端口,则不会在任一客户端上接收数据.
以下是显示我的问题的2个代码片段.第一个连接到远程服务器以在NAT设备上创建规则,然后在另一个线程上启动侦听器以捕获传入的数据包.然后代码将数据包发送到本地IP,以便侦听器获取它.第二个只发送数据包到本地IP,以确保这是有效的.我知道这不是真正的打孔,因为我在不使用NAT设备的情况下将数据包发送给自己.我现在面临一个问题,如果我在NAT设备旁边使用计算机进行连接,我认为这不会有任何不同.
[编辑] 2/4/2012我尝试在我的网络上使用另一台计算机和WireShark(数据包嗅探器)来测试监听器.我看到从其他计算机传入的数据包但是没有被侦听器UDP客户端(udpServer)或发送方UDP客户端(客户端)接收.
[编辑] 2/5/2010我现在添加了一个函数调用,在初始发送和接收数据包之后关闭第一个UDP客户端,只有第二个UDP客户端才能侦听端口.这有效,我可以从该端口上的网络内部接收数据包.我现在将尝试从网络外部发送和接收数据包.我一发现就会发布我的发现.
使用此代码,我在侦听客户端上获取数据:
static void Main(string[] args)
{
IPEndPoint localpt = new IPEndPoint(Dns.Resolve(Dns.GetHostName()).AddressList[0], 4545);
ThreadPool.QueueUserWorkItem(delegate
{
UdpClient udpServer = new UdpClient();
udpServer.ExclusiveAddressUse = false;
udpServer.Client.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReuseAddress, true);
udpServer.Client.Bind(localpt);
IPEndPoint inEndPoint = new IPEndPoint(IPAddress.Any, 0);
Console.WriteLine("Listening on " + localpt + ".");
byte[] buffer = udpServer.Receive(ref inEndPoint); //this line will block forever
Console.WriteLine("Receive from " + inEndPoint + " " + Encoding.ASCII.GetString(buffer) + ".");
});
Thread.Sleep(1000);
UdpClient udpServer2 …
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用VirtualBox进行简单的端口转发,看起来VirtualBox.exe正在侦听端口的主机,但实际上并没有将连接转发给guest虚拟机.我尝试过多个端口,并且我已经多次重启VirtualBox.另一方面,访客主机连接很好.这是信息:
Host: Win7 x64
Guest: Win7 x64
VirtualBox version: VirtualBox 4.2.10
Firewalls: All firewalls on host and guest disabled.
Virtual Box > Machine Settings > Network
Adapter 1:
Attached to: NAT
Cable Connected : True
Port Forwarding:
Rule 1: TCP, HostIP=127.0.0.1, HostPort=8081, GuestIP=127.0.0.1, GuestPort=8081
On Host:
[VirtualBox.exe] TCP 127.0.0.1:8081 IBM-6KT5OPCF76P:0 LISTENING
On Guest:
I never get the connection request on port 8081 or any others I've tried.
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?我想避免使用VirtualBox的桥接适配器有多种原因.我认为使用VirtualBox,NAT端口转发相对简单.
谢谢!
我需要NAT遍历的解决方案来通过互联网传输RDP数据.我遇到了以下工具,它真的很棒 - pwnat
.
我已尝试使用不同路由器后面的两台不同的机器,但我无法使其工作,如上面链接中所述.所以pwnat
仍然有效,如果是的话,我做错了什么?这对我很有帮助.
注意:我正在使用Windows机器进行测试,并从以下链接下载了Windows版本.
http://www.sumitgupta.net/pwnat-windows-complied-version/
任何帮助请..
我在nat防火墙后面有2个ssh服务器,每天都会改变它的wan IP.它们在给定时间内始终处于相同的WAN IP地址,但在不同的端口上.
我这样连接到服务器A:
ssh -p 22001 karl@x1.example.com
Run Code Online (Sandbox Code Playgroud)
和服务器B:
ssh -p 22002 karl@x2.example.com
Run Code Online (Sandbox Code Playgroud)
所以我为同一个IP获得了2个不同的主机密钥,并且当IP改变同一主机的不同IP时也是如此.
我必须在known_hosts文件中一遍又一遍地删除其他密钥或旧密钥(在IP更改的情况下).
我不愿意关闭密钥验证,因为这样会不那么安全.但是始终获得警告也是不安全的(因为我一直忽略这样的警告).有更好的解决方案吗?
这与我在这里的旧问题有关,但不一样:
如果我有两台内部计算机通过NAT路由器连接到同一个外部IP地址,那么路由器如何才能将流量传输到正确的内部计算机?据我所知,NAT将传入的数据包转发到最近将传出数据包发送到[传入数据包]发送方IP地址的计算机.由于两台计算机都发送到同一个地址,路由器是否将数据包转发到两者?如果是这种情况,客户端软件是否有责任确定哪些数据包是相关的?
两台计算机是否都试图连接到同一个端口?
nat ×10
networking ×3
c# ×2
ssh ×2
tcp ×2
android ×1
bittorrent ×1
connection ×1
forwarding ×1
ip ×1
java ×1
linux ×1
openssh ×1
p2p ×1
port ×1
pwnat ×1
rdp ×1
routing ×1
security ×1
stun ×1
traversal ×1
turn ×1
udp ×1
verification ×1
virtualbox ×1