gpt4 book ai didi

linux - 如何检测 Openwrt kern.info 和 daemon.info 事件?

转载 作者:太空狗 更新时间:2023-10-29 12:03:51 26 4
gpt4 key购买 nike

我的背景主要是使用 C 和 C++ 进行 Windows 编程。最近我也有机会使用一些嵌入式 Linux 系统,但我对此还是个新手。

现在我正在为 Openwrt 开发一个实用程序,它需要对正常操作期间发生的网络和系统事件使用react。

我已经能够在某些事件中使用 Hotplug,但其他事件仍然让我望而却步。我可以使用 logread 解析系统日志的输出,但这看起来很原始而且很老套。

特别是,我希望获得类似于热插拔对某些“kern.info kernel”和“daemon.info”事件所做的回调。例如:

 Mar 31 19:42:32 OpenWrt kern.info kernel: [  369.540000] device wlan0 left promiscuous mode
Mar 31 19:42:32 OpenWrt kern.info kernel: [ 369.540000] br-lan: port 2(wlan0) entered disabled state
Mar 31 19:42:32 OpenWrt kern.info kernel: [ 369.730000] device wlan1 left promiscuous mode
Mar 31 19:42:32 OpenWrt kern.info kernel: [ 369.730000] br-lan: port 3(wlan1) entered disabled state
Mar 31 19:42:34 OpenWrt kern.info kernel: [ 371.360000] device wlan0 entered promiscuous mode


Mar 31 19:45:56 OpenWrt daemon.info hostapd: wlan0: STA 04:f7:e4:00:00:00 IEEE 802.11: authenticated
Mar 31 19:45:56 OpenWrt daemon.info hostapd: wlan0: STA 04:f7:e4:00:00:00 IEEE 802.11: associated (aid 1)
Mar 31 19:45:56 OpenWrt daemon.info hostapd: wlan0: STA 04:f7:e4:00:00:00 WPA: pairwise key handshake completed (WPA)
Mar 31 19:45:56 OpenWrt daemon.info hostapd: wlan0: STA 04:f7:e4:00:00:00 WPA: group key handshake completed (WPA)
Mar 31 19:45:56 OpenWrt daemon.info dnsmasq-dhcp[5005]: DHCPREQUEST(br-lan) 10.1.1.51 04:f7:e4:00:00:00
Mar 31 19:45:56 OpenWrt daemon.info dnsmasq-dhcp[5005]: DHCPNAK(br-lan) 10.1.1.51 04:f7:e4:00:00:00 wrong network
Mar 31 19:46:00 OpenWrt daemon.info dnsmasq-dhcp[5005]: DHCPDISCOVER(br-lan) 04:f7:e4:00:00:00
Mar 31 19:46:00 OpenWrt daemon.info dnsmasq-dhcp[5005]: DHCPOFFER(br-lan) 192.168.1.198 04:f7:e4:1c:09:00
Mar 31 19:46:00 OpenWrt daemon.info dnsmasq-dhcp[5005]: DHCPDISCOVER(br-lan) 04:f7:e4:1c:09:00
Mar 31 19:46:00 OpenWrt daemon.info dnsmasq-dhcp[5005]: DHCPOFFER(br-lan) 192.168.1.198 04:f7:e4:1c:09:00
Mar 31 19:46:01 OpenWrt daemon.info dnsmasq-dhcp[5005]: DHCPREQUEST(br-lan) 192.168.1.198 04:f7:e4:1c:09:00
Mar 31 19:46:01 OpenWrt daemon.info dnsmasq-dhcp[5005]: DHCPACK(br-lan) 192.168.1.198 04:f7:e4:1c:09:00 My-iPhone

最佳答案

DHCPOFFER 之类的日志条目(如您的示例所示)是由相应进程(例如,udhcpc)使用 Unix syslog 单独生成的机制(有点像 Windows 事件日志记录 API)

默认情况下,OpenWRT 日志记录由 busybox 包提供的 syslogd 进程处理。这是相当原始的,只是将消息发送到您使用 logread 看到的循环缓冲区和/或发送到 UDP 套接字。

您可以升级 OpenWRT 上的日志记录以使用 syslog-ng 包。这有一个更高级的配置,您应该能够使用它来将过滤后的日志事件发送到您可以编写的脚本来执行您需要的操作。

opkg install syslog-ng

syslog-ng 是 GPL 产品,但文档现在隐藏在商业网站下,希望您可以通过 http://freecode.com/projects/syslog-ng 从源代码中获取它。 .请注意,OpenWRT 似乎提供了 1.6.12 版本,当我在我的 OpenWRT 设备上实现它时,我很难找到它的文档,但最终我通过 wayback 机器找到了它:https://web.archive.org/web/20070406054439/http://www.balabit.com/products/syslog_ng/reference-1.6/syslog-ng.html/x731.html (例如)

提取这些 DHCP 消息并将它们发送到独立日志文件的配置文件片段看起来有点像:

source src { unix-stream("/dev/log"); internal(); };
destination dhcp_messages { file("/var/log/dhcpmessages"); };
filter f_dhcp { match("dnsmasq-dhcp"); };
log {
source(src);
filter(f_dhcp);
destination(dhcp_messages);
};

您可能会发现 pipe()program() 目标驱动程序对您的应用程序最有用。例如,使用 program() 驱动程序,您可以将选定的消息发送到 shell 脚本,该脚本会解析它们并将它们保存到 sqlite 数据库中。

关于linux - 如何检测 Openwrt kern.info 和 daemon.info 事件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22771221/

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