3

次のケースがあります。

  • iOS 上の 2 つのアプリケーション (私のものとサードパーティ) は、TCP/IP 経由で通信する必要があります
  • アプリのコードは変更できますが、サードパーティのアプリは変更できません
  • プロトコルは変更できません (サードパーティのアプリを変更できないため)。

私のアプリでは、正しいアプリと通信していることを確認したいと考えています。

私はgeetpeernameでピアポートを取得する方法を知っています

私が探しているのは、このポートを使用するプロセスの pid を把握する方法です。

同様の質問を見つけました:同じ iOS デバイス上のピア TCP 接続の PID をどのように確認しますか? ただし、彼の場合、両方のポートが同じアプリにあります。

免責事項: 私はプライベート API で問題ありません。AppStore には送信されません。ただし、ジェイルブレイクされていない電話の解決策を探しています。

更新 1

PID とアプリケーション バンドル ID (sysctl を使用) を関連付ける既知の方法があるため、PID が必要だと言いました。

一般的に言って、私は PID 自体は気にしません。私の懸念は、ソケットの反対側のアプリケーションが何であるかを把握することです。

4

1 に答える 1

3

これに対する解決策はありませんが、それを実行しようとすると、次のように進めます。

UNIX システムでは、このlsofコマンドを使用して、どのプロセスがどのファイルを開いているかを判別できます。これにはソケットが含まれlsof、特定のポートを使用してプロセスの pid を判別できます。たとえば、

lsof -n -P -i :443

どのプロセスがポート 443 (HTTPS) を使用しているかを特定しようとしている場合、(OS X の場合):

COMMAND   PID  USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
firefox 81615 myname  112u  IPv4 0xffffff8017379a40      0t0  TCP 192.168.2.7:52521->74.125.28.103:443 (CLOSE_WAIT)

lsoffor Darwinのオープン ソース バージョンは、ここで見つけることができると思います。そのため、main.c から始めて、それらのコマンド ライン引数を使用して、使用されているシステム コールが見つかるまでコードをナビゲートしてみてください。

ユーザーのモバイル権限を持つプロセスで実行すると、必要な呼び出しが機能しない可能性があります。しかし、そうではないでしょうか?ソース自体の内部にセキュリティ チェックがあるlsof場合は、ソースを自分でコピーして貼り付ければ、それを確実に削除できます。

とにかく、誰も別の答えを提供しない場合は、試してみる価値があるかもしれません.

注: lsofはジェイルブレイクされた携帯電話で利用できます。Cydia から入手できる現在のバージョンを実行してみました。5.1.1 または 6.1.2 では機能しませんでした。理由がわからない。それらがリポジトリにあった場合、ある時点で、誰かがlsofiOS に移植できたと思います。

于 2013-05-10T10:03:41.077 に答える