導航:首頁 > 操作系統 > linux進程的網路流量

linux進程的網路流量

發布時間:2024-08-06 22:21:45

1. linux如何獲得一個進程的網路流量

Linux下是沒有文件直接給你按進程記錄流量信息的。你想要編程實現的話,辦法是有的,只是比較麻煩。首先,你需要能截取流經網卡的數據包,這個可以通過libpcap來完成,其次你要完成的最重要的一步就是怎麼根據埠號找到進程的pid。埠號通過截取的數據包可以獲得,這個時候你要按行來解析/proc/net/tcp (如果要支持ipv6的話還要解析/proc/net/tcp6),這個文件記錄了當前活躍的TCP連接情況,每一行代表一條連接,我們感興趣的是其中的inode這一項,你得把inode的值解析出來保存。然後蛋疼的時候來了,接下來你得遍歷所有的/proc/pid/fd文件,察看其中每一個文件描述符,如果發現內容為socket[xxxx]的,把xxxx截取出來,這個xxxx也是inode號,如果和你之前解析/proc/net/tcp的inode號吻合,恭喜你,這說明這個pid和那個tcp連接有關系,進而也就確定了埠號和pid的對應關系,也就知道了數據包和進程之間的對應關系了。


我的建議:

  1. 先看看http://www.tcpmp.org/pcap.html, 熟悉一下libpcap庫的用法,怎麼截取數據包。

  2. 自己看看/proc/net/tcp的內容,想想怎麼做文本解析,除了inode外,源ip,源埠號,目的ip,目的埠號都可以解析出來,而這個四元組實際就代表了一條tcp連接。

  3. 想想怎麼做數據包,連接,進程的老化超時處理。比如說,當前截取的到的數據包在統計過一次流量後,下一次就不應該再計入了,怎麼處理?一條連接長時間沒有任何數據包的交互,怎麼老化掉?一個進程長時間沒有數據包的交互,甚至用戶給關閉了,你的程序如何感知?libpcap截取到數據包後會給你提供截取到的時間戳,好好利用這個時間戳就可以辦到。

  4. 最後,以數據包 -> 連接 -> 進程 的關系來思考會有助於你的程序設計,一條連接可以有N個數據包,一個進程可以有N條連接。這么一想,這3個結構體或者類就能定義好了。剩下的自己琢磨琢磨。

閱讀全文

與linux進程的網路流量相關的資料

熱點內容
pubg為什麼顯示伺服器連接失敗 瀏覽:650
阿里雲掃碼登錄伺服器 瀏覽:970
化學基礎pdf 瀏覽:896
51單片機晶碼管 瀏覽:281
怎麼查伺服器假死原因日誌在哪看 瀏覽:277
掃描pdf文件 瀏覽:926
解壓密碼百度雲在線解壓 瀏覽:767
傳播學演算法推薦 瀏覽:749
我的世界網路游戲如何查找伺服器 瀏覽:257
安卓和蘋果通訊錄怎麼互傳 瀏覽:203
怎麼打開隱私與應用加密的菜單 瀏覽:416
我的世界伺服器小游戲的地址大全 瀏覽:578
在網路安全中加密安全機制提供了數據的 瀏覽:249
南京前端程序員私活怎麼收費 瀏覽:981
拓撲pdf 瀏覽:440
如何在工行app查我的訂單 瀏覽:214
車壓縮機改電動 瀏覽:83
如何尋找音樂app 瀏覽:831
一加加密的照片 瀏覽:200
阿里雲虛擬主機php 瀏覽:639