2017-09-02 50 views
0

我想监视我的游戏服务器的日志文件,以防止数据包修改利用连续的某些行,这需要我来检测这样的线如何监控在一个文本文件

[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应该稍后检索,以便我可以禁止它。 这可能吗?

回答

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),它也不起作用。

+0

我怀疑这是否足以解决问题,因为id和ip需要相同。另外我该如何执行该脚本(我对shell没有任何知识)? –

+0

@SeifHassine'uniq -c'会聚集连续的唯一行并添加它们中有多少个。这将考虑整条线路。 'awk'使用这个计数。 – Kusalananda

+0

非常感谢!有效 –