python-iptables如何指定多参数匹配

时间:2014-12-18 11:48:28

标签: python python-iptables

如何使用python-iptables指定多参数匹配?

例如,以下iptables命令:

-A INPUT -s 1.1.1.1 -p tcp -m tcp --tcp-flags FIN,SYN,RST,ACK SYN -j DROP

如果我创建以下内容:

import iptc
rule = iptc.Rule()
rule.src = '1.1.1.1'
rule.protocol = 'tcp'
t = rule.create_target('DROP')
m = rule.create_match('tcp')
m.tcp_flags = 'FIN,SYN,RST,ACK SYN'

它会抱怨:

ValueError: invalid value FIN,SYN,RST,ACK SYN

PS:我知道,对于我的特定示例,我可以简单地使用m.syn = '1',但我试图概括如何来指定多参数匹配。

2 个答案:

答案 0 :(得分:1)

您使用的是最新版本吗?请参阅此issue

答案 1 :(得分:0)

好的......有人试图发布答案,但是当我评论时,他/她删除了答案。

答案是:

m.tcp_flags = ['FIN', 'SYN', 'RST', 'ACK SYN']

给出了错误的结果:

print m.parameters
{u'tcp_flags': u'FIN SYN'}

然而,这激发了我尝试以下方法:

m.tcp_flags = ['FIN,SYN,RST,ACK', 'SYN']

给出:

>>> match.parameters
{u'tcp_flags': u'FIN,SYN,RST,ACK SYN'}

将该规则提交到INPUT链并运行iptables-save表明它正确返回了我想要的规则。

所以,谢谢!