web-dev-qa-db-ja.com

ネットワークポートは開いていますが、プロセスが接続されていませんか?

開いているネットワークポートで変な状況が発生しています。私の主な質問は、開いている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インスタンス(実際にはいくつか)でした。クラッシュを停止するための修正は カーネルのアップグレード でした。

カーネルのクラッシュが原因でプロセスが停止し、ポートが開いたままのようです。

22
Gary Richardson

カーネルによって開かれたポートはプログラム名で表示されません。 NFSとOCFSに関するものがいくつか思い浮かびます。多分それはそのようなものですか?

または、カーネルのバグである可能性があります。 OOPSとバグのカーネルログを確認します。

6
Thomas

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
24
Kyle Brandt

「netstat --tcp --udp --listening --program」をroot userとして実行します。そうでなければあなたはそれを与えませんPID /プログラム名

次に、kill -9 PIDコマンドを使用します

4
tomcat user

Netstatを介してiノードを取得し、lsofでそのiノードを使用することで、プロセスを追跡できました。 https://serverfault.com/a/847910/94376 の詳細な回答を参照してください。

3
studgeek

私は実際に、これらの時折の質問を特定するのに役立つ小さなシェルスクリプトを作成しました。

#! /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

使用するにはルート権限が必要です

3
Greeblesnort

場合によっては、NFS関連のプログラムがプログラムリストに表示されないことがあります。

また、LDAP pamモジュールとlibnss_ldapはldapサーバーへの接続を開きますが、接続を開いたままにする実際のプロセスはないため、netstat -tnpはプロセスなしのアクティブな接続を示します。

2
hayalci