以编程方式设置Java路由器端口

以编程方式设置Java路由器端口,java,sockets,networking,firewall,router,Java,Sockets,Networking,Firewall,Router,我想知道是否有一种方法可以通过internet在客户端和服务器之间建立连接,并让它们都通过编程设置所有需要的路由器/防火墙配置更改,以打开需要的外部端口进行通信 假设服务器和客户端都有已知的ip地址,并且在本例中不需要DNS来查找ip地址。如何让一台服务器在启动时配置通过防火墙的访问,并告诉路由器如何将正确的通信路由到服务器。我假设客户机可能不需要这样的东西,因为它只需要知道服务器的外部IP地址和端口号。如果我的假设错了,请告诉我 例如,如果我有两个房子,房子(A)有一个服务器,房子(B)有一个

我想知道是否有一种方法可以通过internet在客户端和服务器之间建立连接,并让它们都通过编程设置所有需要的路由器/防火墙配置更改,以打开需要的外部端口进行通信

假设服务器和客户端都有已知的ip地址,并且在本例中不需要DNS来查找ip地址。如何让一台服务器在启动时配置通过防火墙的访问,并告诉路由器如何将正确的通信路由到服务器。我假设客户机可能不需要这样的东西,因为它只需要知道服务器的外部IP地址和端口号。如果我的假设错了,请告诉我


例如,如果我有两个房子,房子(A)有一个服务器,房子(B)有一个客户端,两个站点都知道另一个房子的外部IP地址是什么,知道他们将使用什么端口,Java应用程序如何进行所有配置,或者至少在windows、mac、ubuntu上尽可能多地进行配置。其思想是,服务器和客户端的用户不必为了让应用程序运行而进行大量的防火墙/路由器配置。如果在示例中显示了如何在服务器终止时释放连接,那也很好。示例当java服务器关闭时,它应该关闭防火墙和路由器上的端口设置。安全和干净的房子。

没有简单的方法可以做到这一点,因为这将取决于操作系统和机器上运行的许多可能的防火墙应用程序。另外,如果你的应用程序崩溃,你将永远不会设置原始参数,这在谈论安全性时可能会有问题。

与其尝试设置自定义配置,不如尝试使用标准的通信模板/协议,如http。这将使您的应用程序在几乎任何地方都可以运行,而无需额外配置(因为如果您不允许http端口,则几乎没有必要进行internet连接)。

这取决于所使用的路由器/防火墙硬件。如果它是linux机器,那么应该很简单(只要您拥有正确的权限)。如果您使用的是消费类硬件,则可能需要更多的工作(例如,您可以远程登录netgear路由器并更改一些设置)。假设用户在所有3个操作系统上都有管理员帐户(如果需要),以管理员身份启动应用程序,并且该硬件将是任何随机路由器的消费类硬件。假设防火墙是操作系统软件防火墙以及随机消费者路由器中的任何内置防火墙。我见过许多应用程序在安装应用程序时在路由器中添加端口转发,并且必须有一个API来授予通过防火墙的访问权限,因为许多应用程序只是尝试建立连接操作系统告诉用户,用户点击按钮,告诉操作系统授予应用程序对更改的访问权。其他应用程序是如何做到这一点的?当你说路由器时,你是指一个真正的硬件路由器吗?因为我怀疑任何应用程序在不了解架构和管理pwd的情况下都可以访问和更改路由器配置(这样做根本不安全)。防火墙或路由器的真正含义是控制访问,无论您试图运行什么应用程序。此权限留给网络管理员。当你在电脑上安装了C +或C++应用程序时,它修改了本地Windows防火墙,允许它访问任何需要的访问,但是在没有附加配置的情况下它仍将不被授权在第三方防火墙中。当我安装Skype、AIM、TrRoW、一些电子游戏时。我会在路由器中找到端口转发,并为该应用程序正确标记。这是一个普通的家庭路由器。所以我猜你说的是ISP提供的路由器,而不是专业的。在这种情况下,您的计算机正在向路由器发送请求,以便访问端口xxxx上的远程服务器。然后,您的路由器将检查它是否可以将您请求的端口与知名应用程序(例如skype)匹配。如果可以,它将允许请求流到目标服务器,还将打开任何其他必需的端口并将数据转发到您的计算机。这被称为NAT,网络地址转换器。但是这对一个自制的应用程序来说是不起作用的,因为它不会被“熟知”。我知道这只在路由器公司把它作为一个应用程序列表的抓取器内置的情况下起作用。我想没有一个与此等价的东西不要求路由器公司将您列入名单?