如何监控文本文件中的连续某些行

时间:2017-09-02 17:08:42

标签: linux bash shell

我想监控我的游戏服务器日志文件,以防止数据包修改利用,这需要我检测这样的行

[15:02:14] Packet was modified, sent by id: 20, ip: 197.53.29.136:10479
[15:02:14] Packet was modified, sent by id: 20, ip: 197.53.29.136:10479
[15:02:15] Packet was modified, sent by id: 20, ip: 197.53.29.136:10479
[15:02:15] Packet was modified, sent by id: 20, ip: 197.53.29.136:10479
[15:02:15] Packet was modified, sent by id: 20, ip: 197.53.29.136:10479
[15:02:15] Packet was modified, sent by id: 20, ip: 197.53.29.136:10479

一旦5个相同的行(包含'数据包被修改,由id:'发送,相同的id和ip - 让我们忽略时间)被记录在一秒钟内(1000毫秒),应该在以后检索ip,以便我可以禁止它。 这可能吗?

1 个答案:

答案 0 :(得分:2)

使用uniqawk

uniq -c log | awk '$1 >= 5 && /Packet was modified, sent by id:/'

由于日志文件中的时间戳具有一秒的分辨率,并且由于这是您感兴趣的时间间隔,因此可能只计算文件中的唯一行。

uniq -c将汇总连续的唯一行,并添加其中有多少行的计数。这将考虑整行,包括“id”和IP地址。 awk然后使用此计数并输出计数为5或更多且包含字符串Packet was modified, sent by id:的那些。

这将捕获的情况是,如果在一秒钟内完成了两个或三个日志条目,并且在接下来的第二个期间完成了另外三个或两个(但之后没有其他)。

如果日志未排序(几个不同的IP在同一秒内产生混合的日志条目),它也将无效。