Tag: portforwarding

什么是STUN,是否需要端口转发服务器?

我已经对没有基本服务器的p2p通信做了一些研究,并且通过了STUN。 从我所读到的,STUN是NAT“打孔”的一种方式,它不需要将对等端口转发连接到。 这是正确的,打孔究竟是什么意思? 如果它不需要端口转发,它似乎非常脆弱,因为它越过防火墙,我不完全理解STUN的作用。 STUN可以用于Java中的p2p程序或其他语言,例如聊天客户端,它通过TCP / UDP端口向没有基本服务器的对等端发送消息,或者不要求用户端口转发?

如何使用jsch与ProxyCommands进行端口转发

我想ssh到一个代理后面的机器,然后在我的java程序中执行一个portforwarding。 (为了能够ssh到盒子我应该首先ssh’ed到代理机器)。 我通常在〜/ .ssh / config文件中包含以下条目: ProxyCommand ssh proxyhost.com -t nc %h %p IdentityFile /home/username/username_dsa_key 然后我运行以下命令来执行portforwarding以将hostmachine.com:54321映射到我的localhost:12345: ssh -A -L12345:localhost:54321 hostmachine.com 现在我想用Jsch库做这些,但是在打开会话中的通道后我无法弄清楚如何连接到第二个主机: String proxyHost = “proxyhost.com”; String host = “hostmachine.com”; int lport = 12345; String rhost = “localhost”; int rport = 54321; JSch jsch=new JSch(); jsch.setKnownHosts(“/home/{user}/.ssh/known_hosts”); jsch.addIdentity(“/home/{user}/.ssh/{user}_dsa_key”,passphrase); Session session1 = jsch.getSession(user,proxyHost,22); session1.connect(3000); System.out.println(session1.isConnected()); Channel channel = […]

Java Socket端口转发

我使用套接字在Java中创建了一个联网游戏。 它工作得很好,除了……只能通过我的局域网。 :/我想要做的是设置它,以便我可以启动在家用计算机上运行的服务器,并将客户端代码,在可执行的jar中发送给其他人,让他们能够启动它和通过互联网连接。 但就像…我不知道如何设置我的调制解调器和路由器。 :(我有一个无线清除调制解调器,其配置页面如下所示: http://sofzh.miximages.com/java/ 还有一个Netgear路由器,其页面如下所示: http://sofzh.miximages.com/java/ 现在,在客户端和服务器运行器类中,我将PC的私有IP地址与我选择的端口号一起传递给ServerSocket和Socket对象。 我听说套接字可以是UDP或TCP,具体取决于你如何设置,或者……? 我不做那样的事情,但是我只是实例化它们并传递它们的2个值,然后它们就…… 在服务器的代码中: ServerSocket sock = new ServerSocket(); sock.bind(new InetSocketAddress(IP, 9001)); 客户代码: Socket sock = new Socket(IP, 9001); 同样,我需要知道如何通过更改路由器/调制解调器设置来相应地更改代码。 “IP”是一个字符串,表示我的计算机的私有IP,192.168.1.10,并且该程序仅在我传递给Socket&ServerSocket的字符串时才有效。 就像我说的,我有一个调制解调器连接到一台连接到我的电脑的路由器。 那么,有人可以向我解释(详细说明,因为我是一个菜鸟)我究竟需要做些什么来配置它们,以及我必须对我的代码进行的更改?

在Java中快速实现端口转发

我构建了一个打开ServerSocket的简单应用程序,在连接时,它将自己连接到远程计算机上的另一个服务器套接字。 为了实现端口转发,我使用两个线程,一个从本地输入流读取并流到远程套接字输出流,反之亦然。 实现感觉有点不合理,所以我问你是否知道更好的实现策略,或者甚至有一些代码可以以高效的方式实现。 PS:我知道我可以在Linux上使用IPTables,但这必须在Windows上运行。 PPS:如果你发布这个简单任务的实现,我将创建一个基准来测试所有给定的实现。 对于许多小型(~100字节)包和稳定数据流,解决方案应该很快。 我当前的实现是这样的(在每个方向的两个线程中执行): public static void route(InputStream inputStream, OutputStream outputStream) throws IOException { byte[] buffer = new byte[65536]; while( true ) { // Read one byte to block int b = inputStream.read(); if( b == – 1 ) { log.info(“No data available anymore. Closing stream.”); inputStream.close(); outputStream.close(); return; } buffer[0] = […]