使用python subprocess.Popen设置iptables,其中proto是gre

时间:2016-06-16 01:43:23

标签: python iptables

我面临一个奇怪的问题。我试图在我的mangle表的输出链中执行以下操作

iptables -t mangle -D OUTPUT -p gre -d 2.2.2.0/24 -j MARK --set-mark <somemark>

当我从shell执行上面的命令时,它会很好,并将上面的规则添加到mangle表中的输出链。

但是,当我尝试使用子进程模块实现相同的操作时,我没有收到任何错误,但规则未添加到mangle表的输出链中。

代码:

p = subprocess.Popen(["iptables", "-t", "mangle", "-I",
                      "OUTPUT", "--dst", "2.2.2.0/24",
                      "-p", "gre", "-j", "MARK",
                      "--set-mark", "0x04"])
p.wait()

另一件让我感到不快的是,当我将协议更改为tcp / udp / esp时,它可以正常工作。当协议是gre时,我只面对这个。我尝试使用GRE,47和gre。

有谁可以让我知道我错过了什么?

当我添加到POSTROUTING链时,只需更新相同的规则,它就会被添加。我不确定将proto 47添加到OUTPUT链有什么特别之处?

0 个答案:

没有答案