自动将唯一IP附加到文本文件

时间:2019-06-03 17:38:12

标签: bash grep artillery

我目前正在尝试将攻击我的火炮蜜罐的唯一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。 谢谢

1 个答案:

答案 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。