用java写一个操作linux iptables防火墙的类,采用传参的方式操作,要求操作的足够精细,参数简单命令...
好的,下面是一个示例代码:```import java.io.*;public class Iptables {// 防火墙规则类型:接受、拒绝、丢弃public enum RuleType {ACCEPT, REJECT, DROP}// 防火墙规则链类型:输入、输出、转发public enum ChainType {INPUT...
·
好的,下面是一个示例代码:
``` import java.io.*;
public class Iptables { // 防火墙规则类型:接受、拒绝、丢弃 public enum RuleType { ACCEPT, REJECT, DROP }
// 防火墙规则链类型:输入、输出、转发
public enum ChainType {
INPUT, OUTPUT, FORWARD
}
// 防火墙规则参数
public static class Rule {
public RuleType type;
public ChainType chain;
public String protocol;
public String sourceIp;
public String sourcePort;
public String destinationIp;
public String destinationPort;
}
// 执行Linux命令
private static void executeCommand(String command) throws Exception {
Process process = Runtime.getRuntime().exec(new String[] {"/bin/sh", "-c", command});
BufferedReader reader = new BufferedReader(new InputStreamReader(process.getInputStream()));
String line;
while ((line = reader.readLine()) != null) {
System.out.println(line);
}
reader.close();
process.waitFor();
if (process.exitValue() != 0) {
throw new Exception("命令执行失败:" + command);
}
}
// 添加防火墙规则
public static void addRule(Rule rule) throws Exception {
StringBuilder sb = new StringBuilder();
sb.append("iptables -A ");
sb.append(rule.chain.name().toLowerCase());
sb.append(" -p ");
sb.append(rule.protocol);
if (rule.sourceIp != null) {
sb.append(" -s ");
sb.append(rule.sourceIp);
}
if (rule.sourcePort != null) {
sb.append(" --sport ");
sb.append(rule.sourcePort);
}
if (rule.destinationIp != null) {
sb.append(" -d ");
sb.append(rule.destinationIp);
}
if (rule.destinationPort != null) {
sb.append(" --dport ");
sb.append(rule.destinationPort);
}
sb.append(" -j ");
sb.append(rule.type.name().toLowerCase());
executeCommand(sb.toString());
}
// 删除防火墙规则
public static void deleteRule(Rule rule) throws Exception {
StringBuilder sb
更多推荐
所有评论(0)