我想知道是否有 Linux 或 Java API 可以让我执行命令:
iptables -A INPUT -s 67.215.4.101 -j DROP
或者,如果在 Groovy 中可以做到这一点,我也想知道这一点。
如果您不习惯以 root 身份运行您的 java 进程,这里有另一种解决方法。您可以编写一个用您喜欢的语言编写的简单守护进程,该进程侦听 FIFO 套接字(以 root 身份运行),然后调用 iptables。从您上面给出的示例中,您可能只需将 IP 地址传递给守护程序。从 Java 程序中,您可以向守护进程发送 FIFO 命令。
我最近使用了这种技术,效果很好。在我的例子中,我使用了一个简单的 JNI 接口将 FIFO 消息发送到守护进程。
在 Groovy 中,字符串有一个execute()
方法:
"iptables -A INPUT -s 67.215.4.101 -j DROP".execute()
看看这个页面。
当然,还有需要考虑的执行权限。
可能不是。您最好的选择是将其作为外部命令运行;例如使用System.exec(...)
.
显然,该命令需要以 root 权限运行,这对您运行它的方式有影响。