作爲一個概念證明,再加上一個方便的偏執狂工具,我正在編寫一個OpenBSD LKM,它將連接到一個IRC通道,並且報告何時掛鉤的系統調用被執行。OpenBSD內核模塊調用網絡功能
這樣我就可以實時更新文件系統更改,用戶登錄等等,當我離開現場但可以訪問互聯網時。
我已經得到儘可能連接插座,但我堅持嘗試執行相當於getaddrinfo
甚至inet_addr
調用一個硬編碼地址。
由於這些是用戶級函數,任何使用它們的嘗試都會導致未定義的引用 - 足夠公平。麻煩的是,經過一段時間的谷歌搜索和grep'ing openbsd源,我找不到任何等效的內核函數來做到這一點;最好的建議是在模塊中重新實現它們。
這意味着我需要,也能實現像islower
,isxdigit
和isspace
(也可能是別人,因爲我進步),它變得有點多執行這麼簡單的東西的東西;任何人都知道這個解決方法或替代方案,或者我從網絡文件卡住c + p代碼?
爲了不讓內核模塊直接與服務器通信,爲什麼不讓它打開某些本地通信通道(例如管道或本地套接字)並讓用戶態應用程序執行實際的服務器通信? – 2012-08-12 11:12:25
爲什麼內核需要執行DNS查找?爲什麼你會偏執地擔心被執行的系統調用,但是相信你的DNS系統不是可欺騙的? – tbert 2012-08-12 11:18:06
我想盡量減少模塊依賴的數量(幾乎到了獨立的地步) - 我對使用內核中的userland數據不信任,即使在驗證之後。不過,你說得對,因爲用戶態通信是首選和推薦的方法,我只是喜歡與衆不同。 – septical 2012-08-12 11:24:26