Linux操作系統、偏底層的項目?

大家好!

我們要做一個課程設計,範圍內 自由選題。

範圍是和linux系統相關,既可以是內核層,也可以是用戶層。即便是用戶層也要盡量偏底層。

提問者我的意思是最好用戶層的項目,內核層涉獵很少。

我的水平:linux作日常使用系統,較熟練使用C語言,懂一些linux系統編程,操作系統理論有一定基礎,簡單修改過早期內核(如添加系統調用)。

有什麼可以推薦的項目不?難度不要太大哦,做不出來後果很嚴重!

謝謝!


有一個我之前做過的實習項目你可以考慮一下

現有內核暴露的信息基本是通過procsfs實現的,比如說netstat列出TCP連接-&>進程信息的對應關係。如果你看過netstat或者lsof的實現,你會知道這個過程其實是通過讀取所有/proc目錄下PID文件夾里的fd目錄,裡面有打開的socket文件的inode number,然後再根據/proc/net/tcp里的inode number對應,join到一起的。這個過程很麻煩,不準確。你的任務是,給定一個(saddr, sport, daddr, dport)的tuple,能快速準確地找到這個tuple對應的process ID。

實現方法可以簡單也可以複雜。我可以列幾個思路:

  1. 用auditd,把connect system call給audit掉,然後維護一個in memory的database記錄TCP連接
  2. 用kernel的ftrace功能,將TCP establish和termination的函數給trace掉,把trace的信息放到debugfs里userspace的進程去讀取
  3. 這個方法是最『正統』的,但是我仍然沒找到怎麼做到。每個socket連接有一個inode對應,這個inode是sockfs virtual file system上的inode number。如果你能寫一個kernel module,將這些信息在內核層面讀取出來,直接輸出到procfs包含four-tuple -&> pid信息,也算解決了問題。

補充一下,之前我用的是2實現的,後來發現1更簡單。我當時實現的語言是C++的daemon,加上Python的query client,跟你問題加的tag剛好類似。

加油吧騷年


試試在內核層實現一個私有隧道的packet和un-packet,以及encryption和decryption。

記得考慮隧道分片和分片重組。


推薦閱讀:

C#入門與框架設計 (三) 循環的力量
計算機領域的大牛、大神們(包括歷史上的以及現在的)有哪些奇聞軼事?

TAG:操作系統 | Python | 編程 | Linux | C編程語言 |