特定のポートにデータを送信するプロセスを見つける方法は?

特定のポートにデータを送信するプロセスを見つける方法は?

特定のポートを開いたままにするサービスがあります。

予想しても、得たくないデータを得ていますが、そのデータがどこから来るのかを調べようと努力しています。では、どのようなプロセスを見つけることができますか?送るデータはリッスンしているプロセスではなく特定のポートに送信されます。

答え1

TCPの場合(SCTP 1またはすべての接続指向転送プロトコルに対して同じアプローチが機能しますが)、リスニングプロトコルを見つけるのと同じです。

lsof -nPi tcp:the-port

このポートでTCPソケットを開くプロセスが報告されます。ソースポートがわかっている場合(サーバーアプリケーションがそれを知って記録できる)、それを使用して悪意のあるクライアントを正確に見つけることができます。

UDPやRAWソケットではこれがもっと難しいですが、systemtapやdtraceのようなものが役に立つと思います。レビューされます。


1SCTPlsofサポートがバージョン4.86(Linuxのみ)に追加されましたが、-iSCTPソケットを明示的に要求することはできません。lsof -nP | grep -w 'SCTP.*:the-port'代わりに、これをヒューリスティックとして使用できます。

答え2

以下を試してください。

$sudo ss -tp

または:

$sudo netstat -A inet -p

localhost の結果を防ぐには、次のようにします。

$sudo netstat -A inet -p | grep -v localhost

確立された接続のみを一覧表示します。

$sudo netstat -A inet -p | grep -v localhost | grep ESTABLISHED

答え3

データ転送用に設定した接続の種類に応じて、次のいずれかの方法が目標を達成するのに役立ちます。

  • tcpdump port 1234このポートに送信されたデータを取得するために使用されます。 Wiresharkなどのプログラムを使用して他のコンピュータで分析できます(-wファイルでキャプチャするにはこのオプションを使用してください)。またはWiresharkを直接使用してください。

  • 開いているTCP / UDP接続を確立して維持する場合は、それを使用してnetstat接続のリモートIPを見つけることができます。

  • @StephaneChazelasが提供した答えに示すように、プロセスの開いているソケットを一覧表示します。

答え4

Solarisでは、すべてのプロセスでpfileを実行すると、どのプロセスにどの接続が開いているかを表示する必要があります。おそらく、ggrepの-A、-Bオプションを使用して慎重なファイル管理が必要になるでしょう。

Linuxでは、netstat -anp --inetlsofがインストールされていない場合でも機能します。 (--inetUnixドメインソケットを取得するために削除することもできます)

関連情報