我用 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) {
}