Як програмно дозволити виконуваний файл JAR через брандмауер Windows?


1

Я створив програму на Java, яка використовує FTP-з'єднання для завантаження файлів. Це працює чудово, коли я запускаю його в Eclipse. Однак, коли я експортую проект у виконуваний файл JAR, програма не підключається до FTP-сервера, вона підключається лише в тому випадку, якщо я відключив брандмауер Windows.

Як я можу програмно додати виняток до цього файлу JAR у брандмауері, щоб користувачеві не довелося б вимикати брандмауер, щоб використовувати мою програму?


Всі з'єднання проходять через інтерпретатор java.exe. Якщо його додано в брандмауер, ніщо не може блокувати створення нових з'єднань.

1
Ви не можете програмно додати виняток до брандмауера. Інакше кожна програма могла б це зробити - і тим самим поставити під загрозу брандмауер.

Гаразд, як я можу програмно запитувати виняток у брандмауері, як це роблять деякі програми. Вікно спливаючих вікон, яке вимагає виключення.
DanM

Якщо ви не можете встановити з'єднання, просто виведіть повідомлення, щоб додати виняток до брандмауера користувача.
Рамхаунд

@Prototype Stark Неправда, для цього є API, і він працює чудово. Я перевірив цей нативний код . Ви можете загорнути це в рідний шар і викликати його через Java, або написати сценарій VB для цього чи будь-яку іншу кількість способів.
EntangledLoops

Відповіді:


3

У налаштуваннях брандмауера Windows ви маєте вкладку "Винятки". Додайте "java" або "javaw" або все, що ви використовуєте там як виняток. Ви також можете додати порт 20 та порт 21 до списку винятків.


Спробував це, не працював.
DanM

Впевнені, що ви додали правильний java.exe та / або javaw.exe? Саме той, який викликається, коли ви двічі клацніть на банці?

3

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

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


Спробував це, не працював.
DanM

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 disabled" за допомогою командного рядка, код:

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) {
        }
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.