我正在学习python,并编写了一些代码来使用python iptables库设置iptables。我遇到的问题是我不得不一遍又一遍地重写许多相同的代码行。我懂一些函数,但不懂OOP。我在想有一种更好的OOP方法来编写这段代码,但是我无法理解它。如有任何建议,我们将不胜感激。代码如下。在
import iptc
def dropAllInbound():
chain = iptc.Chain(iptc.Table(iptc.Table.FILTER), 'INPUT')
rule = iptc.Rule()
rule.in_interface = 'eth+'
rule.target = iptc.Target(rule, 'DROP')
chain.insert_rule(rule)
def allowLoopback():
chain = iptc.Chain(iptc.Table(iptc.Table.FILTER), 'INPUT')
rule = iptc.Rule()
rule.in_interface = 'lo'
rule.target = iptc.Target(rule, 'ACCEPT')
chain.insert_rule(rule)
def allowEstablishedInbound():
chain = iptc.Chain(iptc.Table(iptc.Table.FILTER), 'INPUT')
rule = iptc.Rule()
match = rule.create_match('state')
match.state = 'RELATED,ESTABLISHED'
rule.target = iptc.Target(rule, 'ACCEPT')
chain.insert_rule(rule)
def allowHTTP():
chain = iptc.Chain(iptc.Table(iptc.Table.FILTER), 'INPUT')
rule = iptc.Rule()
rule.in_interface = 'eth+'
rule.protocol = 'tcp'
match = rule.create_match('tcp')
match.dport = '80'
rule.target = iptc.Target(rule, 'ACCEPT')
chain.insert_rule(rule)
def allowHTTPS():
chain = iptc.Chain(iptc.Table(iptc.Table.FILTER), 'INPUT')
rule = iptc.Rule()
rule.in_interface = 'eth+'
rule.protocol = 'tcp'
match = rule.create_match('tcp')
match.dport = '443'
rule.target = iptc.Target(rule, 'ACCEPT')
chain.insert_rule(rule)
def allowSSH():
chain = iptc.Chain(iptc.Table(iptc.Table.FILTER), 'INPUT')
rule = iptc.Rule()
rule.in_interface = 'eth+'
rule.protocol = 'tcp'
match = rule.create_match('tcp')
match.dport = '22'
rule.target = iptc.Target(rule, 'ACCEPT')
chain.insert_rule(rule)
def allowEstablishedOutbound():
chain = iptc.Chain(iptc.Table(iptc.Table.FILTER), 'OUTPUT')
rule = iptc.Rule()
match = rule.create_match('state')
match.state = 'RELATED,ESTABLISHED'
rule.target = iptc.Target(rule, 'ACCEPT')
chain.insert_rule(rule)
def dropAllOutbound():
chain = iptc.Chain(iptc.Table(iptc.Table.FILTER), 'OUTPUT')
rule = iptc.Rule()
rule.in_interface = 'eth+'
rule.target = iptc.Target(rule, 'DROP')
chain.insert_rule(rule)
def defaultAction():
dropAllOutbound()
dropAllInbound()
allowLoopback()
allowEstablishedInbound()
allowEstablishedOutbound()
def getInput():
print 'Default action (1) is most secure '
print 'Default - 1'
print 'HTTP - 2'
print 'HTTPS - 3'
print 'SSH - 4'
print 'Exit - 5'
choices = raw_input('Enter choices (comma Separated) ').split(',')
for action in choices:
if action == "1":
defaultAction()
break
if action == "2":
allowHTTP()
break
if action == "3":
allowHTTPS()
break
if action == "4":
allowSSH()
break
else:
break
getInput()
注意所有规则的代码行都是相似的。有没有一种方法可以创建一个规则生成器对象或类似的方法来最小化对代码的重写?在
我添加了以下函数so,并在每次运行脚本时调用它,以便刷新规则。
^{pr2}$
OOP用于维护某事物的状态。OOP适用于同时具有属性和操作这些属性的方法的对象。在
你的代码看起来很好;仅仅为了OOP而重写代码可能比它值得做的更多。如果你真的想使用OOP,你可以做如下的事情。在
^{pr2}$相关问题 更多 >
编程相关推荐