gpt4 book ai didi

linux - 使用 bash 解析日志以获取唯一的 MAC 地址

转载 作者:太空宇宙 更新时间:2023-11-04 10:16:28 25 4
gpt4 key购买 nike

我已经将 Debian box 设置为几个 cisco ASA 的系统日志服务器。他们正在运行 DHCP,我正在尝试跟踪分配了租约的 MAC 地址的唯一实例。我已将 ASA 设置为仅记录 cisco DHCPd 使用的消息,并将其作为 %HOSTIPADDRESS%.log 发送到 Debian 服务器,然后每天轮换。所以我有一个目录,里面装满了这个:

-rw-r----- 1 syslog adm     536351 Aug 23 06:24 10.10.10.4.log.10
-rw-r----- 1 syslog adm 459634 Aug 22 06:24 10.10.10.4.log.11
-rw-r----- 1 syslog adm 176957 Aug 21 06:24 10.10.10.4.log.12
-rw-r----- 1 syslog adm 246654 Aug 20 06:24 10.10.10.4.log.13
-rw-r----- 1 syslog adm 459978 Aug 19 06:24 10.10.10.4.log.14
-rw-r----- 1 syslog adm 606987 Aug 18 06:21 10.10.10.4.log.15
-rw-r----- 1 syslog adm 599140 Aug 17 06:24 10.10.10.4.log.16
-rw-r----- 1 syslog adm 605837 Aug 16 06:24 10.10.10.4.log.17
-rw-r----- 1 syslog adm 607630 Aug 15 06:24 10.10.10.4.log.18
-rw-r----- 1 syslog adm 189493 Aug 14 06:24 10.10.10.4.log.19

在这些日志中的每一个中,我都有一些看起来像这样的东西:

Aug 23 06:20:19 10.10.10.4 %ASA-6-604103: DHCP daemon interface inside:  address granted 011c.9148.dbb4.15 (172.16.1.196)
Aug 23 06:20:41 10.10.10.4 %ASA-6-604103: DHCP daemon interface inside: address granted 0138.0f4a.986a.16 (172.16.1.126)
Aug 23 06:20:51 10.10.10.4 %ASA-6-604103: DHCP daemon interface inside: address granted 0190.b686.63c6.a9 (172.16.1.193)
Aug 23 06:20:55 10.10.10.4 %ASA-6-604103: DHCP daemon interface inside: address granted 0154.4e90.8a7a.00 (172.16.1.211)
Aug 23 06:21:11 10.10.10.4 %ASA-6-604103: DHCP daemon interface inside: address granted 012c.0e3d.fcf6.34 (172.16.1.189)
Aug 23 06:21:35 10.10.10.4 %ASA-6-604103: DHCP daemon interface inside: address granted 0154.4e90.8a7a.00 (172.16.1.211)
Aug 23 06:21:51 10.10.10.4 %ASA-6-604103: DHCP daemon interface inside: address granted 0154.4e90.8a7a.00 (172.16.1.211)
Aug 23 06:22:29 10.10.10.4 %ASA-6-604103: DHCP daemon interface inside: address granted 5caf.0664.cd18 (172.16.1.212)
Aug 23 06:24:00 10.10.10.4 %ASA-6-604103: DHCP daemon interface inside: address granted 01fc.dbb3.49af.eb (172.16.1.207)
Aug 23 06:24:21 10.10.10.4 %ASA-6-604103: DHCP daemon interface inside: address granted 01a0.3be3.03b4.74 (172.16.1.195)
Aug 23 06:24:39 10.10.10.4 %ASA-6-604103: DHCP daemon interface inside: address granted 01b4.79a7.1895.33 (172.16.1.157)

问题是 dhcp 租约会续订,例如,您可以从位于 172.16.1.211 的同一设备的多个实例中看到。我认为我可以通过设置更长的租约来解决这个问题,因为我对 DHCP 工作原理的理解是租约在达到半衰期之前不会开始续订过程,但这是行不通的。

我还遇到了地址池耗尽的问题,因为我的租约太长了,而且我使用的 ASA 模型对其范围大小有硬性限制。

长话短说,我需要解析这些日志并检索其中一个日志中出现的唯一 MAC 地址的数量。关于如何使用 bash 完成此操作的任何想法?如果我知道如何从其中一个文件中提取该信息,我可以通过设置过程来使用 cron 或其他东西为所有这些文件执行此操作。我不是程序员,但是,我是网络工程师。任何帮助,将不胜感激。

谢谢,

最佳答案

Long story short, I need to parse those logs and retrieve the number of unique MAC addresses that occur in one of those logs.

是的,考虑到日志文件中数据的规律性,使用几种不同的工具可以很容易地做到这一点。

最基本的是使用cut

cut -d" " -f13 | sort | uniq -c

一个更高级的工具是 awk,它提供了许多逻辑增强功能,允许您根据需要添加任意数量的条件语句来过滤数据。对于你的情况,虽然它仍然很简单,

awk '{print $12}' | sort | uniq -c

在这两种情况下,cutawk,我只需要将数据中的字段数计算到感兴趣的值,然后将其指定为列(awk-speak 中的字段编号)。

(在测试这些答案时,我发现使用 cut 需要使用 -d""-f13(出于某种原因)。我认为 cut 默认为 -d"" 但我必须明确指定它才能使代码正常工作)。

当然,在这两个示例中,我都使用了 sortuniq 实用程序(man uniq 的操作方法)。 uniq,有几个选项,-c选项表示count,所以需要对数据进行排序,让counts正确累加(我在我原来的评论中错过了)。


举个例子,你可以扩展你的计数器来过滤每条记录前面的日期值

awk '/^Aug 23/{print $12}' | sort | uniq -c

但是还有更多的过滤和逻辑工具可以与 awk 一起使用。


如果您要定期处理日志文件数据(或其他非 XML 类数据),我建议您使用 Grymoire's Awk Tutorial .

健康教育

关于linux - 使用 bash 解析日志以获取唯一的 MAC 地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46006580/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com