我想监控我的游戏服务器日志文件,以防止数据包修改利用,这需要我检测这样的行
[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,以便我可以禁止它。 这可能吗?
答案 0 :(得分:2)
使用uniq
和awk
:
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在同一秒内产生混合的日志条目),它也将无效。