すべてのネットワークトラフィックがAndroidデバイスで実行されているローカルプロキシを介してリダイレクトされるシナリオを想定してみましょう。
プロキシ内で、どのアプリケーション(パッケージ名、アプリケーション名、..)がその特定のネットワーク呼び出しを発信したかを確認することは可能ですか?
編集:お詫び、私はここで詳細が不足していました。私はHTTPプロトコルを参照しているため、ネットワーク呼び出しは、あるURLへの単なるHTTPリクエスト(GETまたはPOST)です。
すべてのネットワークトラフィックがAndroidデバイスで実行されているローカルプロキシを介してリダイレクトされるシナリオを想定してみましょう。
プロキシ内で、どのアプリケーション(パッケージ名、アプリケーション名、..)がその特定のネットワーク呼び出しを発信したかを確認することは可能ですか?
編集:お詫び、私はここで詳細が不足していました。私はHTTPプロトコルを参照しているため、ネットワーク呼び出しは、あるURLへの単なるHTTPリクエスト(GETまたはPOST)です。
アプリがパケットで送信する情報によって異なります。ネットワークパケット(参照しているプロトコルを指定していません)に、それを送信したアプリに関するデフォルトの情報があるかどうかを尋ねる場合、答えはノーです。
ただし、特定のアプリセットのパケットを調査し、この情報をプロキシに保存すると、十分なパケットがあれば、ソースアプリを検出できます。もちろん、これはあなたが知らないアプリについての情報を生み出すことはありません。
編集:HTTPリクエストの場合、通常、HTTPヘッダーには、このリクエストを発信したアプリに関する情報(ブラウザのバージョンなど)が含まれます。
私はそれをする方法を見つけました。実際には少し回避策がありますが、問題なく機能しているようです。
誰かがそれをチェックしたいのであれば、私はそうするために簡単なAndroidライブラリを書きました。これは、各ソケットが/ proc / net / tcp(またはIPv6ベースの接続の場合は/ proc / net / tcp6 )と呼ばれるファイルのエントリとしてマップされるという事実に基づいています。
これは、エントリごとに、そのポートとそれに関連付けられたPIDを読み取ることができることを意味します。
基本的に、ライブラリのmainメソッドは次の手順を実行します。
Socket
オブジェクトまたは関連するポートを受信します( Socket.getPort()
)PackageManager.getPackagesFromPid()
メソッドを呼び出すことにより、パッケージ名やアプリケーションバージョンなど、ソースアプリケーションに関する一意の情報を取得できます。/ tcp *ファイルは通常50エントリ以下であるため、パフォーマンスは非常に良好です。