1. 程式人生 > >一種動態跟蹤TCP連線與程序相關性的方法

一種動態跟蹤TCP連線與程序相關性的方法

描述
   TCP連線跟蹤是網路流控和防火牆中的一項重要的基礎技術,當運用於主機時,連線必與程序相關聯,要麼是主動發出的,要麼是被動接受的,當後代程序被動態建立時,由於檔案描述符的繼承,一個連線就會被這個程序樹中的所有程序共享;當一個程序發出或接受多個連線時,就擁有了多個連線。本方法可用於網路安全產品中,監控TCP連線及所屬程序,能準確並動態地知道一個連線被哪些程序共享,一個程序擁有哪些連線。

特點

   作業系統自帶的netstat工具只是關聯到了一個根程序,無法看到擁有該連線的所有程序,檢視程序擁有的全部連線也不方便。該方法的特點是實時跟蹤、檢視連線與程序相關資訊方便、支援連線的管控。

實現

   本方法通過核心安全的十字連結串列實現了連線與程序的相關性,連線資訊結構體含有一個所屬程序連結串列頭,程序資訊結構體含有一個擁有連線連結串列頭,通過十字連結串列結點連結,x方向連結到程序的連線連結串列,y方向連結到連線的程序連結串列,如下圖所示    程序1為根程序,程序2,...,程序n為程序1的後代程序;連線1,連線2,...,連線n為程序1產生的連線。node(x,y)為十字連結串列結點,用於關聯連線與程序,x對應程序編號,y對應連線編號,每個node包含了所屬的連線和程序指標,每行和每列都是一個雙向迴圈連結串列(迴圈未畫出),每個連結串列用一個自旋鎖同步操作。
   動態跟蹤的過程包括4個方面:程序建立、程序退出、連線產生、連線銷燬。在Linux下,可通過攔截核心函式do_fork掛鉤程序建立,攔截do_exit掛鉤程序退出;可通過攔截inet_stream_ops的成員函式connect和accept掛鉤連線產生,攔截成員函式release掛鉤連線銷燬。下面為4個方面對應的流程圖,由於所有外層加鎖前已禁止本地中斷和核心搶佔,因此內層加鎖前就不必再禁止本地中斷和核心搶佔了。

   程序建立

   將copy_node插入到c的程序連結串列末尾,即為y方向增加(下同);插入到p的連線連結串列末尾,為x方向增加(下同)。

   程序退出
   從c的程序連結串列中移除node,即為y方向移除(下同);再從p的連線連結串列中移除node,即為x方向移除(下同)。

   連線產生
      當程序發出連線或接受連線時,呼叫此流程。
   連線銷燬
      當某個程序銷燬連線時,呼叫此流程。 posted on 2016-07-13 11:24 春秋十二月 閱讀(1022) 評論(0)  編輯 收藏 引用 所屬分類: System