Параметр должен войти в свойства системы ... и он должен быть там до того, как соответствующая часть библиотеки классов Java инициализируется.
Способ защиты от «бомбардировки» - это передать параметр JVM в качестве параметра командной строки; например
java -Djava.net.preferIPv6Addresses=true ... com.example.MainClass <args>
Вы также могли бы код приложения, чтобы ввести настройки, используя
System.setProperty("java.net.preferIPv6Addresses", "true");
но вы должны убедиться, что инъекции происходит достаточно скоро , и это не было бы тривиально.
1 - «Достаточно скоро» означает, что статическая инициализация сетевого кода JVM произошла. Это может быть трудно достигнуть в сложном приложении. Обратите внимание, что в документации Network Properties указано: «Некоторые проверяются только один раз при запуске виртуальной машины, поэтому наилучшим образом установлены с использованием опции -D команды java ...». Обратите внимание, что он НЕ указывает, что эти свойства могут быть установлены только таким образом.
Внушение с помощью переменной среды JAVA_OPTS
будет работать только для некоторых приложений. Это зависит от сценария запуска/оболочки приложения. Стандартные java.exe
и javaw.exe
команды , конечно, не обращать внимание на $JAVA_OPTS
То же самое относится к _JAVA_OPTIONS
..., который является тот, который я не видел раньше.
Я пытался поставить это из командной строки, но ее бросает error- -Djava.net.preferIPv6Stack»не распознается как внутренней или внешней командой, исполняемой программой или пакетным файлом. – user27
Внимательно прочитайте инструкцию вручную для команды 'java' *. Опция '-D' будет работать, если вы используете ее правильно. –
Ручной ввод не работает в моем случае, или может быть, я не в состоянии сделать это правильно, надеюсь, что инъекция работает. thnkx – user27