我是一家网络托管公司的系统管理员实习生,我正在尝试弄清楚如何完成这项任务,因此我将尽可能进行描述。
我们有 /etc/blockedips 和 /etc/donotblock
我想创建一个脚本,我最终可以在 cron 中设置该脚本,该脚本将每小时运行一次,扫描两个文件并比较它们,并且 a) 发送警报(我们使用看门狗)或 b) 自动删除 /blockedips 内的 IP这与 /donotblock 中不应该阻止的内容相匹配,因为我们有很多其他技术人员总是添加不应该被阻止的 IP。
由于我是脚本编写新手,我遇到的问题是我可以轻松地为直接 IP 地址运行一个简单的 grep 命令(即:76.76.76.76 将轻松地在两个文件之间匹配),但我不知道如何执行以下操作:
假设我们公司的 IP 块是 99.10.10.0/24。我不想将每个地址放入 /donotblock 中,我只想让脚本匹配 99.10.10.* 的任何 IP,并且我对如何完成此操作画了空白。
有人能指出我正确的方向吗?编辑:样本
所以文件看起来像这样:
/etc/不阻止
我们
26.225.128.0/18 43.150.128.0/20 44.50.142.0/24 73.16.32.0/20
其他所有人
184.123.20.10 184.123.20.11
进而
/etc/blocked_ips
76.45.23.1
假设在 /blocked_ips 中添加了一些技术
73.16.32.10,我只想让脚本查找“73.16.32.*”来弥补整个子网。
与首席工程师交谈时,他更喜欢让脚本自动删除与 donotblock 中的内容相匹配的 Blocked_ips 内的 IP
谢谢
答案1
Pythonnetaddr
包允许您迭代 IP 范围:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
from netaddr import *
ipset = IPSet(['99.10.10.0/24'])
for ip in ipset:
print ip
输出:
99.10.10.0
99.10.10.1
99.10.10.2
...
99.10.10.253
99.10.10.254
99.10.10.255