
2台のLinuxサーバーがあります。彼らがであると仮定しC
ますS
。
C
はいS
私はS
コンピュータでタイピングをしています。
$ netstat -an | grep tcp 設定
0 0 192.168.1.220:3306 番号: 57010 確立された
C
これで、接続されていると言えます。機械
の中で私も知りたいC
プロセス名オープンポート57010そしてS
サーバーに接続してください。どうすればいいですか?もちろん、ルートアクセス権がありますC
。
答え1
一つの方法はと言うことですlsof -i:57010 -sTCP:ESTABLISHED
。これはカーネルの開かれたファイルハンドルテーブルに移動し、そのポートを使用してTCP接続を確立したプロセスを見つけます。 (ネットワークソケットは* ixタイプシステムのファイルハンドルです。)-sTCP:LISTEN
サーバー側でこれを使用して、リスナーソケットのみをフィルタリングできます。
これが機能するため、lsof
rootとして実行しない限り、ユーザーが所有しているプロセスのみを表示できます。また、一般的な*ixシステムではたくさん特定の時間に開いているファイルハンドルの数。他の回答で提供される方法netstat
はより速く、通常アクセス要件が低くなります。
しかし、このlsof
アプローチには大きな利点があります。すべてのタイプ*ixオペレーティング・システムが出力netstat
にプロセス名を含めるためのフラグを持っているわけではありません。lsof
利用可能なすべての* ixタイプのオペレーティングシステムに移植。netstat
たとえば、OS Xの場合はそうです。オプションがありますが、Linuxと同じようには-p
機能しません。netstat -p
lsof
あなたの質問のような一般的なポート番号の場合、通常はフラグを追加しなくても問題を解決できます。-s
これは、特定のコンピュータにそのポートに接続してリッスンするプログラムがある可能性がほとんどないためです。ポート番号(HTTPの場合は80など)を追加すると、そのポートを同時に使用する複数のプログラムがある可能性があるため、役に立ちます。
幸い、このフラグは4.81-s
以降でのみ使用できるため、ほとんどの場合オプションです。lsof
以前のバージョンでは、これは-s
まったく異なる意味でした!これは2008年に比べて後退した変化ですが、まだ予想外の結果をもたらします。lsof
たとえば、RHEL 5 は 4.78 で提供されます。
答え2
netstat -anp | grep 57010
サーバーで利用可能氏。ただし、これはポートをマッピングするファイアウォールなしでのみ機能します。57010他の人に。
答え3
完全性のために:
ss
新しいLinuxネットワークユーティリティセット()を使用するiproute2
:
ss -tp sport = :57010 dst 192.168.1.220