2016-09-11 15 views
0

Linux 3.9カーネル以降で動作するアプリケーションXがあり、特定のソケットで接続を待ち受ける。このソケットに接続する試行回数や送信元IPなどを追跡する無関係のアプリケーションYを作成したいと思います。無関係のプロセス間でソケットを共有する(listen)

C++(理想的にはQtライブラリ経由)では、既にソケットを共有/監視できますか無関係のプロセスによって使用されていますか?ソケットを共有しようとしているいくつかのStackOverflowの質問がありましたが、この場合は不可能です。

+1

あなたは 'tcpdump'を使うことができます:http://superuser.com/questions/604998/monitor-tcp-traffic-on-specific-port –

+0

これを行う1つの方法(それは特別なOSに依存しません。 Xのポートに接続して前後のトラフィックを転送することによって、YがXの代理として接続を受け入れ、Xのプロキシとして機能することになります。しかし、Yは別のポートで接続を受け入れる必要があります。 Xを直接計測する方が簡単かもしれません。 –

答えて

1

ファイル記述子を別のプロセスに転送することができます。これは、クロスプロセスdup(2)のように動作します。詳細は、Can I open a socket and pass it to another process in Linuxを参照してください。しかし、これは明示的に行われる必要があります。つまり、あるプロセスがファイル記述子を送信し、別のプロセスがファイル記述子を受信します。したがって、「無関係な」プロセスは協力しなければならない。

ただし、監視用のソケットは使用できません。ソケットは接続のみを受け入れることができますが、フォーク、スレッド、またはファイル記述子の受け渡しによってソケットが共有されていても、別のプロセスが同じソケット上の接続を受け入れるかどうかを見ることはできません。

適切な権限とOSが与えられれば、ptrace(2)または同様のインターフェイスを使用して、システムレベルでアプリケーションの動作を監視できます。そこでは、アプリケーションが受け入れを使用するかどうかと、それが返すものを見ることができます。または、コメントで示唆されているように、パケットキャプチャ(tcpdump、rawソケット)を使用してトラフィックを監視し、成功したTCPハンドシェイクから一部の(未知の)プロセスが接続を受け入れる必要があることを差し引くことができます。

+0

プロセスXは別の会社によって書かれています。私は内部にアクセスすることはできません。 – TSG

+0

@Telium:ptraceとパケットのキャプチャを行います。あるいは、受け入れるためにlibc呼び出しを傍受しようとするかもしれません。 –

関連する問題