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,不适用tail命令
时间: 2023-12-03 22:47:38 浏览: 29
可以使用Python的`inotify`库来实现实时读取日志内容。具体步骤如下:
1. 安装`inotify`库,可以使用pip命令进行安装:
```
pip install inotify
```
2. 使用`inotify`库监听指定文件的变化,一旦文件有新内容,就读取最新内容并进行处理:
```python
import re
import subprocess
from inotify.adapters import Inotify
# 监听文件变化
def watch_file(file_path):
inotify = Inotify()
inotify.add_watch(file_path, mask=Inotify.IN_MODIFY)
for event in inotify.event_gen():
if event is not None:
# 读取最新内容并进行处理
with open(file_path, 'r') as f:
for line in f:
match = re.search(r'{TCP} \d+.\d+.\d+.\d+', line)
if not match:
continue
ip = match.group()
result = subprocess.call(['iptables', '-A', 'INPUT', '-s', ip, '-j', 'DROP'])
if result == 0:
print(f'封禁IP {ip} 成功!')
else:
print(f'封禁IP {ip} 失败!')
if __name__ == '__main__':
file_path = '/var/log/suricata/fast.log'
watch_file(file_path)
```
这样,程序就会实时监听`/var/log/suricata/fast.log`文件的变化,一旦文件有新内容,就会读取最新内容并进行处理。注意,这里使用`inotify`库是因为它可以实现文件的实时监听,而不需要使用`tail`命令轮询读取文件内容。