http://www.kernelchina.org/?q=node/565
Android上的流量監控思路
看了一下linux提供的API以及相關代碼,基本有一些結論。
1.協議棧對於每socket並不維護統計信息,因爲沒有必要添加相關信息,一則影響性能,二則無處保存。
通過NetLink的 NETLINK_TCPDIAG無法實現,該接口被iproute2中的工具使用,提供一些系統快照信息。其中2.6的實現是讀取tcp_info結構獲取tcp connection的快照信息,相關信息中也沒有包含統計信息。
有關netlink,有網文描述下面RFC是其標準定義,
RFC 3549 Linux Netlink as an IP Services Protocol
簡單的看了一下這個RFC,其實是將netlink作爲網絡協議使用的一個informational RFC。作爲IETF是從來不care主機內部實現的,因此這個RFC也一定不能稱爲linux netlink的定義。
2.可行思路之一是通過netfilter架構採集信息,但是Android的Netfilter沒有被編譯到標準的kernel。
看了一下有些大俠已經實現的類似工具,基本上要刷系統,內核中添加netfilter編譯支持來實現。
3.可行思路之二是在Java層面對於應用收發流量進行獲取,尚不知Java是否提供相關接口用於監控虛擬機。另外Android的虛擬機也是非標準的Google自己的,功能有待研究。