2014-03-31 181 views
1

我的背景主要是C和C++中的Windows編程。最近我也有機會與一些嵌入式Linux系統一起工作,但我仍然是新手。如何檢測Openwrt kern.info和daemon.info事件?

現在我正在開發Openwrt的實用程序,它需要對正常操作期間發生的網絡和系統事件做出反應。

我已經能夠使用Hotplug進行一些事件,但其他人仍然沒有看到我。我可以使用logread解析系統日誌的輸出,但這看起來很原始而且很駭人。

特別是,我希望得到類似於hotplug爲'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 

回答

2

DHCPOFFER(如被看見在你的例子)日誌條目被相應的過程中使用了Unix syslog機制(一種-像Windows事件日誌單獨產生(例如,通過udhcpc) 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設備上實現文檔時找到文檔,但最終我通過backback機器找到了它: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()驅動程序,您可以將選定的消息發送到解析它們並將它們保存到sqlite數據庫中的shell腳本。