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


22

ネットワークポートが開いていると、奇妙な状況になります。私の主な質問は、なぜ開いている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インストール)が想定されていますが、nrpeデーモンは実行されていません。開始しようとすると、すぐに終了します。

lsof -i :5666出力も表示されません。私のシステムでは(x)inetdが実行されていません。

更新

はい、これらのコマンドをルートとして実行していました。Telnetはできますが、応答はありませんでした。

さらに調査した結果、カーネルエラーが見つかりましたdmesg。これは、古いカーネルを実行しているEC2インスタンス(実際にはそれらのいくつか)でした(2.6.16は明らかに不安定です)。クラッシュを止めるための修正は、カーネルアップグレードすることでした。

カーネルがクラッシュしたためにプロセスが終了し、ポートが開いたままになっているようです。


2
lsof -i tcp:5666の結果は何ですか?再起動してもポートはそのままですか?
デイブDrager

これはNRPEの新規インストールですか?
fpmurphy

あなたはプログラムの詳細を確認するには、rootとしてnetstatコマンドを実行する必要があること
eckes

ご質問への回答をお気軽に追加してください...
rogerdpack

回答:


6

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

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


24

netstatとlsofをルートとして、またはsudoで実行しましたか?最後の列に注目してください。

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マンページから:

所有していないソケットでこの情報を表示するには、スーパーユーザー権限も必要です。

実行されていないことをどのように知っていますか?ポートが使用中の場合、「使用中のソケット」エラーですぐに終了することは理にかなっています。ポートにtelnetで接続するとどうなりますか?

telnet localhost 5666

4

rootユーザーとして 'netstat --tcp --udp --listening --program'を実行します。それ以外の場合、PID /プログラム名は表示されません

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


3

私はこれらの時々の質問を特定するのに役立つ小さなシェルスクリプトを実際に書きました:

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

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


良いですが、もっと必要です。netstatの接続ごとに実行する必要があります。その後、単一のプログラムが何をしているかを特定できます。これはlsof / fstatまたはその他の便利なユーティリティのないボックスで、ルートとしては他の問題のためにインストールできません。
アキ


2

nfs関連のプログラムがプログラムリストに表示されないことがあります。

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.