import re import subprocess with open('/var/log/suricata/fast.log', 'r') as f: for line in f: # 使用正则表达式匹配IP地址 match = re.search(r'{TCP} \d+\.\d+\.\d+\.\d+', line) if not match: continue ip = match.group() # 调用iptables命令封禁IP result = subprocess.call(['iptables', '-A', 'INPUT', '-s', ip, '-j', 'DROP']) if result == 0: print(f'封禁IP {ip} 成功!') else: print(f'封禁IP {ip} 失败!')可否使用循环来让代码一直读取日志内容并封禁ip
时间: 2023-12-03 15:47:39 浏览: 135
adworld-wargame:我对https://adworld.xctf.org.cntask上的pwn挑战的利用
是的,你可以使用一个无限循环来实现一直读取日志并封禁IP的功能。可以使用`time.sleep()`函数在每次循环之间添加一定的延迟,以免过度占用系统资源。以下是一个示例代码:
```
import re
import subprocess
import time
while True:
with open('/var/log/suricata/fast.log', 'r') as f:
for line in f:
# 使用正则表达式匹配IP地址
match = re.search(r'{TCP} \d+\.\d+\.\d+\.\d+', line)
if not match:
continue
ip = match.group()
# 调用iptables命令封禁IP
result = subprocess.call(['iptables', '-A', 'INPUT', '-s', ip, '-j', 'DROP'])
if result == 0:
print(f'封禁IP {ip} 成功!')
else:
print(f'封禁IP {ip} 失败!')
time.sleep(5) # 每隔5秒读取一次日志
```
这个示例代码中每隔5秒读取一次日志,并对其中匹配到的IP进行封禁。循环会一直执行,直到程序被手动停止。
阅读全文