2016-11-06 139 views
0

我正在使用awk命令在两个不同时间之间查找我的日志文件中的条目。 我已经使用这个命令,它的工作原理:awk命令来匹配多个模式

awk '$0 >= "Oct 04 12:00:00" && $0 <= "Oct 04 12:30:00"' /var/log/messages 

我想知道我怎么可以搜索被允许或在此期间封锁特定端口。例如:如果我正在搜索从12:00到12:30之间阻塞的端口22,那么如何使用awk命令搜索它? /var/log/messages文件

内容:

Nov 5 8:44:30 System1 Kernel [022525 252748] OUTPUT DROPPED=eth0 OUT= MAC=ff:ff:ff:ff:ff:ff:01:00:25:97:b2:47:01:00 SRC=10.0.0.1 DST=192.168.4.141 LEN=221 TOS=0x00 PREC=0x00 TTL=128 ID=23315 PROTO=UDP SPT=183 DPT=183 LEN=209 

在日志文件中的条目类似于像上面。我想知道如何匹配SPT = 80和DPT = 80的12:00至12:30之间的信息

+1

我们不知道您的日志文件的外观如何。哪些具体的关键字会在那里?日志文件的结构也可能很有用。 – karakfa

回答

0

您可以使用&&添加更多条件,就像您对日期所做的一样。您可以在两个正斜杠之间放置一个正则表达式,以匹配整行/记录。

awk '/port 22 (blocked|allowed)/ && $0 >= "Oct 04 12:00:00" && $0 <= "Oct 04 12:30:00"' /var/log/messages 

当然你也可以用括号和逻辑组合(&&)和/或或(||)如果你需要更复杂的规则。

我想知道我怎么能比得上之间的信息,比方说,12:00至12:30,其中SPT = 80和DPT = 80

继上述说明中,只需添加/SPT=80/ && /DPT=80/ && ...条件。请注意,您显示的示例行不匹配,因为它的SPT和DPT值不是80,而是143.

顺便说一下,请记住,按日期过滤的方式(例如$0 >= "Oct 04 12:00:00" && $0 <= "Oct 04 12:30:00")可能无效日期越过月份边界,例如Nov的下限在Dec中的上限不起作用。

+0

感谢您的回答。我不寻找阻止或允许的选项。这仅仅是我给的例子。我正在寻找SPT的源端口,如我的问题中的示例输出所示。因此,如果我替换为'awk'/ SPT = 80/&& $ 0> =“Oct 04 12:00:00”&& $ 0 <=“Oct 04 12:30:00”'/ var/log/messages'我得到一个空行。 –

+2

作为你的榜样,你不想做的事情绝不是一个好主意,而只是描述和展示你想做的事情。 –

+0

@JoeWoods好吧,既然你没有举出你的实例,我回答了你的问题。无论如何,'/ SPT = 80 /'的部分是正确的。用_only_(即'awk'/ SPT = 80 /'/ var/log/messages')尝试。如果你看到这些线条,你就知道这是你错误的日期过滤。修理它。 – Arkku