0

我目前正在尝试将攻击我的炮兵蜜罐的唯一 IP 自动附加到文本文件中。

我已经在这个脚本中达到了一个点,我正在监视 syslog 的变化(炮兵放置新的攻击日志的地方),并运行 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 附加到文本文件中,但前提是它们已经不存在于文本文件中。谢谢

4

1 回答 1

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²) 会狠狠地咬你。

在启动和inotifywaittail -f /var/log/syslog创建尝试时触发,或者如果您使用的是 systemd,您可以只做一个journalctl -f. 通过例如这个 lex 管道输出:

%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

否则将 journalctl 替换为 tail -f 和 inotifywait -me 创建循环,在子外壳中触发更多。

于 2019-06-03T18:37:38.083 回答