1

Я создал программу на Java, которая использует FTP-соединение для загрузки файлов. Он отлично работает, когда я запускаю его в Eclipse. Однако, когда я экспортирую проект в исполняемый файл JAR, программа не подключается к FTP-серверу, она подключается, только если я отключаю брандмауэр Windows.

Как программно добавить исключение к этому файлу JAR в брандмауэре, чтобы пользователю не пришлось отключать брандмауэр для использования моей программы?

4 ответа4

3

В настройках брандмауэра Windows у вас есть вкладка "Исключения". Добавьте "java" или "javaw" или что-то, что вы используете там в качестве исключения. Вы также можете добавить порт 20 и порт 21 в список исключений.

3

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

Вы должны добавить интерпретатор java.exe в брандмауэр. Вы не можете добавить файл .jar в брандмауэр Windows.

2

Вы можете вручную добавить исключения в брандмауэр, чтобы ваша программа могла получить их, не отключая их полностью.

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-соединение находится в пассивном режиме.

1

Решил это, добавил "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) {
        }

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .