我的背景大多是用C和C++编写Windows程序。最近,我也有机会使用一些嵌入式Linux系统,但我在这方面仍然是新手。
现在,我正在为Openwrt开发一个实用程序,它需要对正常操作期间发生的网络和系统事件做出反应。
我已经能够使用热插拔的一些事件,但其他的仍然没有我。我可以使用logread解析系统日志的输出,但这似乎是原始的和恶意的。
特别是,我想得到一个回调,类似于热插拔对一些'kern.info内核‘和'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发布于 2014-04-04 12:04:16
像DHCPOFFER这样的日志条目(如您的示例中所看到的)是由相应的进程(例如,udhcpc)使用Unix 赛斯洛机制(类似于Windows )单独生成的。
默认情况下,OpenWRT日志记录由busybox包提供的syslogd进程处理。这是相当原始的,只需使用logread和/或UDP套接字向循环缓冲区发送消息。
您可以升级OpenWRT上的日志记录以使用syslog-ng包。这有一个更高级的配置,您应该能够使用它将过滤过的日志事件发送到脚本中,您可以编写脚本来完成所需的操作。
opkg install syslog-ngsyslog-ng是一种GPL产品,但是文档现在被隐藏在一个商业网站下面,人们会希望您可以通过http://freecode.com/projects/syslog-ng从源代码中获得它。请注意,OpenWRT似乎提供了1.6.12版本,当我在OpenWRT设备上实现它时,在查找文档时遇到了困难,但最终我通过回退机器找到了它: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数据库中。
https://stackoverflow.com/questions/22771221
复制相似问题