開いているネットワークポートで変な状況が発生しています。私の主な質問は、開いているTCPポートに関連付けられているプログラムがないのはなぜですか?
netstat -ln --program
Active Internet connections (only servers)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp 0 0 0.0.0.0:5666 0.0.0.0:* LISTEN -
私の特定のケースでは、ポート5666でリッスンするnrpeデーモン(opsview install)があるはずですが、実行中のnrpeデーモンはありません。起動しようとすると、すぐに終了します。
lsof -i :5666
も出力を表示しません。私のシステムでは(x)inetdが実行されていません。
[〜#〜]更新[〜#〜]
はい、これらのコマンドをrootとして実行していました。 Telnetは可能ですが、応答はありませんでした。
詳しい調査の結果、dmesg
にカーネルエラーが見つかりました。これは、古いカーネル(2.6.16は明らかに不安定)を実行しているEC2インスタンス(実際にはいくつか)でした。クラッシュを停止するための修正は カーネルのアップグレード でした。
カーネルのクラッシュが原因でプロセスが停止し、ポートが開いたままのようです。
カーネルによって開かれたポートはプログラム名で表示されません。 NFSとOCFSに関するものがいくつか思い浮かびます。多分それはそのようなものですか?
または、カーネルのバグである可能性があります。 OOPSとバグのカーネルログを確認します。
Rootとして、またはsudoを使用してnetstatおよびlsofを実行しましたか?最後の列に注意してください:
netstat -ln --program
tcp 0 0 192.168.21.1:53 0.0.0.0:* LISTEN -
tcp 0 0 127.0.0.1:53 0.0.0.0:* LISTEN -
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN -
Sudo netstat -ln --program
tcp 0 0 192.168.21.1:53 0.0.0.0:* LISTEN 2566/named
tcp 0 0 127.0.0.1:53 0.0.0.0:* LISTEN 2566/named
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 3125/sshd
Netstatマンページから:
所有していないソケットでこの情報を表示するには、スーパーユーザー権限も必要です。
1つが実行されていないことをどうやって確認しますか?ポートが使用中の場合、「ソケット使用中」エラーですぐに終了するのは理にかなっています。ポートにtelnetするとどうなりますか?
telnet localhost 5666
「netstat --tcp --udp --listening --program」をroot userとして実行します。そうでなければあなたはそれを与えませんPID /プログラム名
次に、kill -9 PIDコマンドを使用します
Netstatを介してiノードを取得し、lsofでそのiノードを使用することで、プロセスを追跡できました。 https://serverfault.com/a/847910/94376 の詳細な回答を参照してください。
私は実際に、これらの時折の質問を特定するのに役立つ小さなシェルスクリプトを作成しました。
#! /bin/bash
([ "$1" = "" ] || [ "$2" = "" ]) && echo "Usage: tracer <space> <port>" && exit 0
for i in `fuser -n $1 $2`
do
ps aux | grep $i | grep -v 'grep'
done
/ usr/local/bin/tracerとして保存します。出力:
root@mo-log:/usr/flows# tracer tcp 80
80/tcp:
root 27904 0.0 0.0 111668 3292 ? Ss Aug04 0:03 /usr/sbin/Apache2 -k start
www-data 32324 0.0 0.0 335332 3560 ? Sl Aug05 0:00 /usr/sbin/Apache2 -k start
www-data 32327 0.0 0.0 335324 3560 ? Sl Aug05 0:00 /usr/sbin/Apache2 -k start
使用するにはルート権限が必要です
場合によっては、NFS関連のプログラムがプログラムリストに表示されないことがあります。
また、LDAP pamモジュールとlibnss_ldapはldapサーバーへの接続を開きますが、接続を開いたままにする実際のプロセスはないため、netstat -tnpはプロセスなしのアクティブな接続を示します。