如何以编程方式允许可执行 JAR 文件通过 Windows 防火墙?

如何以编程方式允许可执行 JAR 文件通过 Windows 防火墙?

我用 Java 创建了一个程序,该程序使用 FTP 连接下载文件。当我在 Eclipse 中运行它时,它运行良好。但是,当我将项目导出到可执行 JAR 文件时,该程序不会连接到 FTP 服务器,只有当我禁用 Windows 防火墙时它才会连接。

我如何以编程方式在防火墙中为该 JAR 文件添加例外,以便用户无需关闭防火墙即可使用我的程序?

答案1

在 Windows 防火墙设置中,有一个“例外”选项卡。添加“java”或“javaw”或您在此处使用的任何内容作为例外。您还可以将端口 20 和端口 21 添加到例外列表中。

答案2

-> Control Panel -> Systems and Securtiy -> Windows Firewall -> Allowed Programs

您必须将 java.exe 解释器添加到防火墙。您无法将 .jar 文件添加到 Windows 的防火墙。

答案3

您可以手动向防火墙添加例外,以便您的程序可以通过而无需完全禁用它。

http://support.lexisnexis.com/us_en_us/record.asp?bRFS=1&ArticleID=10093

可以自动添加例外,运行以下命令。

添加防火墙规则:

Process p = Runtime.getRuntime().exec("cmd /c start runas /user:domain\administrator /savecred:cmdrun.txt netsh advfirewall firewall add rule name=”FTP Service” action=allow service=ftpsvc protocol=TCP dir=in");

禁用状态 ftp 过滤:

Process p = Runtime.getRuntime().exec("cmd /c start runas /user:domain\administrator /savecred:cmdrun.txt netsh advfirewall set global StatefulFTP disable");

另外,请确保您的 ftp 连接处于被动模式。

答案4

解决了,通过命令提示符添加“netsh advfirewall set global StatefulFTP disable”,代码:

try {
            Process p = Runtime.getRuntime().exec("netsh advfirewall set global StatefulFTP disable");
            p.waitFor();
            BufferedReader reader = new BufferedReader(
                    new InputStreamReader(p.getInputStream()));
            String line = reader.readLine();
            while (line != null) {
                System.out.println(line);
                line = reader.readLine();
            }

        } catch (IOException e1) {
        } catch (InterruptedException e2) {
        }

相关内容