我编写了一个基于Python的守护程序,可以根据某些参数阻止恶意IP。现在,我想在1小时后自动解锁(删除规则)IP,但我不确定如何在我的代码中使用timer / scheduler模块。
我知道替代方法可以是:
但我有局限性,不能使用上述替代方法。
我的主要代码在WHILE(1)循环中运行,因此它的阻塞IP。 如何在我的python代码中创建一个并行模块/函数来执行IPTABLES -D
命令来删除IP?每个IP都有自己的特定时间来解除阻塞。
e.g。
更新
while True:
if (ip_found == -1 and port_found == -1):
os.system("iptables -A INPUT -s "+str(s_addr)+" -j DROP")
print(str(s_addr) + " was a malcious IP and it is blocked")
else:
print("Not a malcious IP")
答案 0 :(得分:0)
逻辑上,您可以尝试以下步骤:
您可以安排在要删除或取消阻止队列中的第一个项目时运行出队过程。
如果您想在同一模块中使用队列和出列逻辑,您可以尝试类似:
while(1):
queue(List of IPs)
dequeue()
sleep(1000) # sleep for 1 second
根据您和我的理解提供的代码,我建议实施以下内容:
import os
from datetime import datetime, timedelta
from time import sleep
from sys import stdout
#These values will be populated by the existing logic
ip_found = -1
port_found = -1
#This is some IP address to be blocked
s_addr = ""
#Sorted List of IP addresses
ip_list = []
while True:
#Create temporary list
tmp_list = ip_list[:]
if (ip_found == -1 and port_found == -1):
tmp_list.append({'ip_address': s_addr, 'blocked_at': datetime.now()})
ip_list = sorted(tmp_list, key=lambda x: x['blocked_at'])
os.system("iptables -A INPUT -s "+str(s_addr)+" -j DROP")
print(str(s_addr) + " was a malcious IP and it is blocked")
else:
print("Not a malcious IP")
unblock_time = datetime.now()
#Keep unblocking all IPs which have been blocked for 1 hour or more
while (ip_list[0]["blocked_at"] + timedelta(hours = 1) < unblock_time):
print(ip_list[0]["blocked_at"])
unblock_ip = ip_list.pop(0)
#Implement command to unblock IP
os.system("-------- command to unblock IP --------")
print("Unblocked IP " + unblock_ip['ip_address'])
#if needed output may be flushed to stdout
stdout.flush()
#sleep for 1 second
sleep(1)
- 您需要编写取消阻止IP地址的命令
- 请以此为出发点,而不是复制粘贴解决方案!