我目前正在尝试将攻击我的火炮蜜罐的唯一IP自动添加到文本文件中。
在此脚本中,我已经监视到日志中的变化(大炮放置新的攻击日志),并运行grep命令以在每次修改时在syslog中查找所有唯一IP。
我现在要做的是将grep命令的输出通过管道传递到“某物”,该东西将仅附加不存在于要附加的文本文件中的唯一IP。
#!/bin/bash
import inotify-tools
inotifywait -r -m -e modify /var/log/syslog |
while read path _ file; do
grep -E -o "([0-9]{1,3}[\.]){3}[0-9]{1,3}" /var/log/syslog | sort | uniq | ??????
done
我只是在寻找我需要传递给该命令的命令,以便将唯一IP附加到文本文件,但前提是该文本文件中不存在这些IP。 谢谢
答案 0 :(得分:0)
inotifywait -r -m -e modify /var/log/syslog | while read path _ file; do grep -E -o "([0-9]{1,3}[.]){3}[0-9]{1,3}" /var/log/syslog | sort | uniq | ??????
每次/var/log/syslog
更改时,您都在重新扫描它的整体。 O(N²)会硬咬你。
在启动和inotifywait创建尝试时触发tail -f /var/log/syslog
,或者如果您使用systemd,则只需执行一个journalctl -f
。通过例如管道输出这个词法:
%option main nodefault
IPBYTE [0-9]|[1-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5]
%%
{IPBYTE}("."{IPBYTE}){3} puts(yytext);
[0-9.]+
[^0-9]{0,8192}
提取所有ipv4地址,将结果通过单个管道传递
awk 'ARGIND==1 { seen[$0]++ } !seen[$0]++' known.ips - >> known.ips
仅附加以前未显示的地址。
因此,systemd自启动以来一直保持最新并保持最新状态
(journalctl -b; journalctl -f) | extractip4s | that.awk known.ips - >>known.ips
否则,在子外壳中用尾号-f和inotifywait -me create循环替换journalctl。