2017-04-16 62 views
1

的套接字事件通知我需要找到本地TCP的連接/ Unix域的連接啓動儘可能以最有效的方式連接的客戶端程序。獲取內核

目前,我有這個在驅動程序中實現一個解決方案,即攔截都接受並連接系統調用,它們匹配,找出客戶端進程。

現在我試圖達到同樣的沒有我自己的驅動程序。該攔截系統調用適當和解決客戶端以類似的方式

  • Linux審覈系統插件:

    不同的方法我試過了。這種方法有3個問題:

    1. 每個攔截事件從內核流向auditd進程到其他一些中間進程,而不是我的插件。
    2. 審計規則適用於所有的插件和審計日誌 - 我無法定義我自己的一套過濾規則。 - 這可能會導致使用審計系統的機器出現極度低效。
    3. 它要求將審計安裝在機器上(對於許多Linux發行版,這不是默認設置)。
  • 模仿的netstat/lsof的 - 爲了找到保存的連接,他們遍歷整個procfs的安裝過程 - 這是有道理的,因爲在連接建立,每個連接可以屬於多個進程。 如果我想爲每個連接建立都這樣做,這種方法是非常不有效的。
  • 我想嘗試LSM(Linux安全模塊)解決方案之一 - 但我目前不熟悉它 - 是他們可以通過對正在運行的應用內核事件「決定」的一個LSM?

我會很樂意聽到建議和其他意見,可能會導致我爲我的原始目標的合理解決方案。

+0

的netfilter,iptables的/ nftables更多細節。 –

+0

我已經有一個機制來獲取新建立連接的通知。我缺乏的是他們的發起者,根據[鏈接](http://stackoverflow.com/a/23532240/2835437),我仍然需要遍歷整個procfs安裝來獲取它。 –

+0

我不確定你的意思。查看SYN數據包的源地址,它是發起者。 –

回答

0

實測值,只有適合我的需要對於Unix域的套接字一個選項 - 如果在服務器側捉迷藏碼是possability(如在我的情況下),可以以下列方式使用setsockopt:

getsockopt(fd, SOL_SOCKET, SO_PEERCRED, &cr, &len) 

http://welz.org.za/notes/on-peer-cred.html