Как отключить все сетевые подключения в Java - PullRequest
4 голосов
/ 10 января 2011

Есть ли способ запустить Java VM (java.exe) в Windows Server 2008 и отключить все сетевые подключения, используя аргумент командной строки или системную переменную?

Ответы [ 3 ]

9 голосов
/ 10 января 2011

Это можно сделать, включив диспетчер безопасности Java по умолчанию. По умолчанию защита не применяется, поэтому вам разрешено делать что угодно, но если включен менеджер безопасности, он ограничит доступ к сети, доступ к файлу и многое другое, если вы не укажете иное в файле политики безопасности.

Чтобы включить диспетчер безопасности по умолчанию, передайте этот аргумент JVM при запуске.

java -Djava.security.manager=default my.main.Class

При этом любая попытка доступа к сети изнутри JVM выдает java.net.NetPermission.

Это также нарушит такие вещи, как доступ к файлу, поэтому, если вам нужно разрешить его, вам нужно будет указать это в специальном файле политики безопасности (-Djava.security.policy=path/to/policy.file). Там должно быть множество примеров того, как его настроить, просто найдите «java permissions», чтобы начать работу.

2 голосов
/ 04 мая 2015

У меня была такая же задача проверить автономный установщик для нашего продукта. Все сказанное выше почти правильно, но в первый раз создать файл .policy непросто. Вот что я сделал:

  1. Созданный файл общей политики, который не имеет разрешения для разрешения имен хостов (см. Фрагмент кода ниже);

  2. Добавлено -Djava.security.manager -Djava.security.policy=pathto/policy.file в параметрах jvm;

универсальное содержимое файла .policy:

grant {
    permission java.io.FilePermission "<<ALL FILES>>", "read,write,execute,delete";
    permission java.util.PropertyPermission "*", "read,write";
    permission java.lang.RuntimePermission "*";
    permission java.net.NetPermission "*";
    permission java.lang.reflect.ReflectPermission "*";
};

Если во время теста что-то пытается вывести содержимое наружу, происходит сбой с исключением из системы безопасности.

2 голосов
/ 10 января 2011

Ну, я не пробовал этого, но теоретически вы могли бы установить системные свойства для прокси-сервера SOCKS на несуществующие, и в соответствии с документацией все сокеты TCP будут проверены через прокси-сервер SOCKS - и не получится.

Примерно так:

java -DsocksProxyHost=127.0.0.1 SomeClass
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...