全部,
我想以 root 身份运行我的 Java 程序的一部分。只有一个特定的功能作为 root。程序的另一部分应该以启动该程序的用户权限运行。我只想以 root 身份运行以下代码,而其他代码则按原样运行。这是因为我看到这段代码在以 ROOT 权限运行时有不同的行为。
try
{
addr = Inet6Address.getByName(host);
isReachable = addr.isReachable(20*1000);
} catch (UnknownHostException e)
提前致谢
最佳答案
Java 程序没有可移植的方法来更改有效用户 ID;即从以 root 权限运行更改为另一个用户。 (即使在 C 中,应用程序也不能随意在特权和非特权之间切换。特权切换是单向的。)
阅读 InetAddress.isReachable
的 javadoc它确实根据 JVM 进程的权限使用不同的机制。但是,isReachable
使用的两种方法都不能保证有效。例如
- 某些防火墙可能会选择性地阻止 ICMP ECHO 消息,
- 目标机器可能没有在端口 7 上运行 Echo 服务……或者端口 7 可能被防火墙锁定。
所以我会完全解决避免问题。只要尝试做您真正想做的事,而忘记使用isReachable
。或者,如果它在您的控制范围内,请修复机器/网络,以便这两种机制都适用于您需要测试的机器。
@Geek - 你说你不能测试特定的端口,因为它们可以被阻止。好吧,任何都可以被阻止,包括 ICMP PING、ICMP ECHO 以及您可能用来测试主机是否可达的任何其他内容。
只有一件事真正重要:您能否与您实际要使用的服务对话。只有一种方法可以找出答案:尝试使用它。
或者换句话说,测试主机是否可用没有意义。主机不可用:特定服务可用。
关于java - 以 Root 身份运行 Java 程序的一部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5271731/