3

最も簡単な方法は、おそらく/ proc / net/tcpまたは/proc/ net/tcp6を監視するループを作成することです。ただし、ほとんどすぐに通知する必要があるため、非効率的です。私が調べた最も近いものは、任意のファイルのIOイベントでコールバックを提供できるinotifyです。問題は、procfsが通常のファイルシステムではなく、inotifyがそれをサポートしていないように見えることです(少なくとも/ proc / net/tcpと/proc/ net / tcp6では)。

さらに、これを実装するためにプログラムにroot権限を持たせたくありません。

編集:ユーザースペース接続の要件を削除しました。また、これを実現できるinotifyなどのカーネルサポートが組み込まれていることを期待しています。私の場合、iptablesを操作するには煩わしすぎるかもしれません。

誰かが何か考えを持っていますか?ありがとう!!

4

3 に答える 3

2

ローカルiptables構成にログルールを追加して、新しい接続が開始されるたびにメッセージをログに記録し、root以外のユーザーがログファイルを読み取り可能にすることができます。これにより、(a)イベントの即時通知(inotifyを使用してファイルへの書き込みを検出できます)および(b)検出プロセス自体にroot権限は必要ありません。

于 2012-05-04T19:33:08.247 に答える
1

raw ソケットを使用してアウトバウンド トラフィックを監視することは確かに可能です。その方法については、パケット (7) の man ページを参照してください。ただし、これはあなたが望むものではないかもしれません。

接続追跡が有効になっている場合、netlink を使用してカーネルから新しい接続の通知を取得できる場合があります。これらのことを行うための API はひどいので、既にそれを行っているプログラムのソースを調べることを検討してください。「conntrack」バイナリは、一部のディストリビューションで提供される可能性があると思います (それが何の一部なのかはわかりません)。

于 2012-05-05T22:20:58.563 に答える
1

私が考えることができる最善の方法は、オンボード プロキシを実行し、他のアプリがそれを介して接続するように説得することです。APN設定を変更してこれを実行しようとした人もいます.

しかし、これは醜く、すべてのバージョンで機能するとは限らず、おそらく回避できます。

残念ながら、Android はエンド ユーザーがシステム自体の動作にオプションの改善をインストールできるようには設計されていません。

于 2012-05-05T01:45:47.333 に答える