特定のポートを使用しているプロセス(特にプロセスID)を調べたいのですが。唯一の問題は、Sudoを使用したくない、またはrootとしてログインしていないことです。これを機能させたいプロセスは、プロセスIDを見つけたいのと同じユーザーが実行しているので、これは簡単だと思っていました。
lsof
とnetstat
はどちらも、Sudoを使用して実行しない限り、プロセスIDを通知しません。ポートが使用されていることを通知します。
追加のコンテキストとして、管理しているサーバーにSSH経由で接続し、リバースポートフォワードを作成するさまざまなアプリがあります。それらがセットアップされると、私のサーバーは転送されたポートを使用して何らかの処理を行い、その後接続を中止することができます。特定のポート(各アプリには独自のポートがあります)をプロセスにマップできる場合、これは単純なスクリプトです。助言がありますか?
ちなみに、これはUbuntuボックスにありますが、ほとんどのLinuxディストリビューションで標準的なソリューションになると思います。
--program
netstatのオプションは、あなた自身のプロセスのPIDと名前を表示します。このオプションは存在し、net-tools 1.60からnetstat 1.42のRHEL 6で動作します。
netstat -an --tcp --program
は、プロセスのPIDを表示します。
パウェルの提案は私にはうまく機能しているようですが、代わりに、ここに私がShell1から聞いています:
[madhatta@risby ~]$ nc -l localhost 3456
そして、Shell2のlsof
を使用してそれを表示しています。
[madhatta@risby tmp]$ lsof -i tcp:3456
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
nc 18109 madhatta 3u IPv4 69205153 0t0 TCP localhost.localdomain:vat (LISTEN)
編集:コメントを書き込む
SSH転送は異なる動作をする必要があります-プロセスが同じユーザーによって所有されている場合でも、root/Sudoとして実行しない限り、lsof出力にリストされることはありません。
しかし、これは私にはそうではありません。 sshを使用してローカルポート8001を転送した後、ssh vpn.example.com -L 8001:rt.int:80
、私は次に見つけます:
[madhatta@risby ~]$ lsof -n -i tcp:8001
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
ssh 5375 madhatta 8u IPv6 381234 0t0 TCP [::1]:vcom-tunnel (LISTEN)
ssh 5375 madhatta 9u IPv4 381235 0t0 TCP 127.0.0.1:vcom-tunnel (LISTEN)
サンプル出力の一部を、できればあまり編集しすぎないようにしてください。