如何在Windows Server 2008上禁用Java中的所有网络连接

如何在Windows Server 2008上禁用Java中的所有网络连接,java,windows,network-programming,windows-server-2008,Java,Windows,Network Programming,Windows Server 2008,有没有办法在Windows Server 2008上运行Java VM(Java.exe),并使用命令行参数或系统变量禁用所有网络连接,我还没有尝试过,但是理论上你可以将SOCKS代理的系统属性设置为不存在的,并且根据文档,所有TCP套接字都将通过SOCKS代理进行尝试,结果失败 大概是这样的: java -DsocksProxyHost=127.0.0.1 SomeClass 您可以通过启用默认Java安全管理器来实现这一点。默认情况下,不强制执行任何安全性,因此您可以执行任何操作,但如果启

有没有办法在Windows Server 2008上运行Java VM(
Java.exe
),并使用命令行参数或系统变量禁用所有网络连接,我还没有尝试过,但是理论上你可以将SOCKS代理的系统属性设置为不存在的,并且根据文档,所有TCP套接字都将通过SOCKS代理进行尝试,结果失败

大概是这样的:

java -DsocksProxyHost=127.0.0.1 SomeClass

您可以通过启用默认Java安全管理器来实现这一点。默认情况下,不强制执行任何安全性,因此您可以执行任何操作,但如果启用安全管理器,它将限制网络访问、文件访问和许多其他操作,除非您在安全策略文件中另有指定

要启用默认安全管理器,请在启动时将此参数传递给JVM

java -Djava.security.manager=default my.main.Class
通过这样做,任何来自JVM内部的网络访问尝试都将抛出
java.net.NetPermission


这也会破坏文件访问等功能,因此如果需要允许,则需要在特殊的安全策略文件中指定这些内容(
-Djava.security.policy=path/to/policy.file
)。应该有很多关于如何设置它的例子,只要搜索“java权限”就可以开始了。

我也有同样的任务来测试我们产品的脱机安装程序。上面所说的几乎都是对的,但是创建.policy文件第一次并不容易。以下是我所做的:

  • 没有解析主机名权限的板条箱通用策略文件(请参阅下面的代码段)

  • 在jvm参数中添加了
    -Djava.security.manager-Djava.security.policy=pathto/policy.file

  • 通用.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 "*";
    };
    
    grant{
    权限java.io.FilePermission“”“读、写、执行、删除”;
    权限java.util.PropertyPermission“*”,“读、写”;
    权限java.lang.RuntimePermission“*”;
    权限java.net.NetPermission“*”;
    权限java.lang.reflect.ReflectPermission“*”;
    };
    

    如果在测试过程中有东西试图从外部获取内容,它会失败,出现安全异常。

    解决方案应该能够禁用每个Java VM进程的网络,并且应该从进程外部定义(不让进程禁用自己的网络)1.这个问题本来可以问得再好一点的,对吗?你本来应该这么说的。您作为一个用户已经有足够长的时间了,知道在提问时提供相关细节的重要性。我可以设置一个虚拟代理并使其失败,但我更希望能够告诉Java“您可能不使用网络”。是的,这是有效的。这是一个有点肮脏的黑客行为,但对于快速测试来说,它比配置安全管理器更容易设置,默认情况下,安全管理器将限制除网络访问之外的许多其他事情。