xtables lock

写了一个python脚本,通过统计iptables里是否有某个端口的策略,判断某个端口是否开启。如果没开启的话,就打开该端口。

原始的shell命令是:iptables -L -n -v | grep -w 161 | wc -l

然后发现,在执行的过程中,端口被开放了多次,iptables里有很多开放同一个端口的策略,我百思不得其解,明明代码里统计了端口是否开放,为什么还在重复开放端口。开始以为是os.popen的原因,怀疑os.popen没有获取到shell命令执行的结果。后来又想,如果os.popen有问题,那不很多代码都有问题,应该不是os.popen的问题。再后来看到同事修复一个类似的bug,才了解到,可能是多个进程同时想获取iptables的锁,导致我的统计命令没有获取到对应的锁,导致统计命令实际没有执行,所以没有获取到值。后来就把shell命令改成以下形式

port_count = int((os.popen('iptables -L -n -v -w 1| grep -w 161 | wc -l').readlines()[0].rsplit(" "))[0])
if port_count == 0:
    os.system("/usr/sbin/iptables -I INPUT -p udp --dport 161 -j ACCEPT")
port_count = int((os.popen('ip6tables -L -n -v -w 1| grep -w 161 | wc -l').readlines()[0].rsplit(" "))[0])
if port_count == 0:
    os.system("/usr/sbin/ip6tables -I INPUT -p udp --dport 161 -j ACCEPT")

iptables  -w [seconds]    maximum wait to acquire xtables lock before give up

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值