回答:
TCPの場合(ただし、SCTP 1または接続指向のトランスポートプロトコルでも同じアプローチが機能します)、リスニングプロトコルを探す場合と同じです。
lsof -nPi tcp:the-port
そのポートでTCPソケットが開いているプロセスを報告します。送信元ポートがわかっている場合(サーバーアプリケーションがそのことを認識してログに記録できる場合)、代わりにそのポートを使用して不正クライアントを特定できます。
UDPまたはRAWソケットの場合、systemtapやdtraceのようなものが役に立つ可能性があると思いますが、それはより複雑です。おそらく同様に監査されます。
1lsof
バージョン4.86ではSCTPサポート(Linuxのみ)が追加されましたが、-i
SCTPソケットを明示的に要求するために使用することはできません。lsof -nP | grep -w 'SCTP.*:the-port'
代わりにヒューリスティックとして使用できます。
データを送信するために確立する接続のタイプに応じて、これらのアプローチのいずれかを使用すると、どこかにアクセスできます。
tcpdump port 1234
このポートに送信されるデータを取得するために使用します。Wiresharkなどのプログラムを使用して、別のマシンで分析することができます(-w
オプションを使用してファイルにキャプチャされます)。または、Wiresharkを直接使用します。
接続netstat
のリモートIPを見つけるために使用できるtcp / udp接続を確立し、開いたままにする場合。
@StephaneChazelasが提供する回答のように、プロセスの開いているソケットを一覧表示します。
sockstat
コマンドを使用して、ローカルホスト上のサービスへの接続を開始したプロセスを見つけることができます。
DESCRIPTION
The sockstat command lists open Internet or UNIX domain sockets.
すべてのソース接続を宛先に一致させるだけです。これは、TCP / UDP / UNIXsocketで正常に機能します。
Solarisでは、すべてのプロセスでpfilesを実行すると、どのプロセスがどの接続を開いているかが表示されます。おそらくggrepの-A、-Bオプションを使用して、慎重なファイルリングが必要になります...
Linuxでは、netstat -anp --inet
lsofがインストールされていなくても機能します。(--inet
Unixドメインソケットも取得するにはドロップします)