このネットワークソケットを使用しているのは何ですか?


18

NTPを使用してマシンの時刻を更新しようとしています。ただし、エラーが発生します。

host # ntpdate ntp1.example.org
10 Aug 12:38:50 ntpdate[7696]: the NTP socket is in use, exiting

「ソケットは使用中です」というエラーはどういう意味ですか?このソケットを使用しているものを確認するにはどうすればよいですか?

これはCentOS 4.xシステムで発生しますが、FreeBSD 7.x、Ubuntu 10.04、およびSolaris 10でも発生します。


回答:


20

できるよ

lsof -n | grep -i "TCP\|UDP" | grep -v "ESTABLISHED\|CLOSE_WAIT"

すべてのリッスンポートを表示しますが、ntpdが実行しているドーナツへの費用:

service ntpd status

「使用中のソケット」とはどういう意味ですか?いくつかのしわを滑らかにすることが許されるなら(そして非常に基本的な説明のために、これのほとんどの謝罪はあなたのために是正で​​す)... TCP / IP(インターネットの言語)は各コンピューターがIPアドレスを持っていることを指定します、インターネット上のそのコンピューターを一意に識別します。さらに、接続可能な各IPアドレスには65,000の番号付きポートがあります。

Webサーバーに接続する場合は、ブラウザーでサイトを開きますが、実際には、その下の機械がWebサーバーのIPのポート80に接続しています。Webサーバーのデーモン(ポート80への接続をリッスンするプログラム)は、「ソケット」を使用してそのポートを開いたままにし、ポートを予約します。一度に同じポートを使用できるプログラムは1つだけです。

ntpdを実行しているため、そのポートを使用していました。「ntpdate」はそのポートにアクセスしようとしましたが、すでに開いているため、「socket already in use」エラーが発生しました。

編集
もUDPのアカウントに変更されました


1
lsofは私の世界を揺るがします!IPv4でもgrepを実行して、さまざまなIPベースのものを見つけます。
geoffc

「これを既に知っているすべての人に謝罪」-謝罪しないでください。このサイトの目的の1つは、一般的な質問に対する適切な回答を提供することです。この初期ベータの目的は、コンテンツを提供することです。
ステファンLasiewski

私は知っていますが、私は彼らに話をしようとしていないことを尋ねている人が知っていることを確認したかったです。
マットシモンズ

私は質問をしましたが、あなたは私に話しかけていませんでした。私も答えを知っていますが、ベータ版にとっては良い質問だと思います。そして、あなたの答えは私が書くどんなものよりもはるかに良かった;)
ステファンLasiewski

何もありません@MattSimmons Isofコマンドは私のCentOSの7に
3ブロック

10

また、netstatを使用して開いているソケットを探すこともできます。他のポスターが示唆しているように、lsofを使用するよりもずっときれいです。ルートとしてこのコマンドラインを試してください

netstat -lp -u -t

関連するpidやプログラムなど、すべてのリスニング接続を表示します。-lパラメータはリッスン接続を指定し、-pはPID / nameを表示することを指定し、-tおよび-uはTCPおよびUDP接続(IPv4およびIPv6)のみが必要であることをnetstatに指示します。

数値のポート名とホスト名(つまり、ホストの場合は解決されず、ポートの場合はサービス名に変換されない)を表示する場合は、-n上記のコマンドラインに追加できます。

編集:これはLinuxで動作します-BSDベースのボックスが周りにないので、BSDでどのように動作するかわかりません。


+1:これは、ntpdプロセス(デフォルトでUDPをリッスンする)を実際に表示する唯一の回答です。
ステファンLasiewski

人間の場合:あなたのフラグは同等であるnetstat --listen --programs --udp --tcp
ステファン・Lasiewski

1
FreeBSDは '-p'( "プログラムの表示")をサポートしていないため、人々はLSOFを使用しています。また、-l( "リスニングソケットの表示")フラグもサポートしていませんが、でそれを行うことができると思いますが| grep LISTEN、UDP接続は除外されます。しかし、それ以外の場合、FreeBSDの同等のフラグは次のとおりnetstat -p udp -p tcp -aであると思います:が、netstat -aもっと簡単かもしれません。
ステファンLasiewski

@Stefan:私の答えはUDPソケットも表示します。
kbyrd

@kbyrd:興味深い。UDPパケットは表示されません。あなたの投稿に対する私のコメントをご覧ください。
ステファンLasiewski

2

FreeBSDでは、lsofが機能しない場合にsockstatを使用することもできます(たとえば、何らかの理由で/ dev / memを持たない仮想化システムで)。IPv4ソケットをリッスンするすべてのプログラムのリストを取得するには:

sockstat -l4

1

ルートとして、これを行います:

lsof | grep IPv4 | grep LISTEN

これにより、IPv4ソケットでリッスンしているすべてのプロセスが表示されます。あなたはそれをブロックするかもしれないことをするの-bを防ぐために追加したいlsofかもしれません。それを行う場合は、おそらくにリダイレクトstderrすることもできます/dev/null


私にとって、これはudpパケットを表示しないようです。ポート514 / udpでリッスンしているrsyslogdを実行しているUbuntuボックスでテストしています。
ステファンLasiewski

sudo lsof |grep UDPUDPパケットを表示する必要があります。
ステファンLasiewski

1

lsofこのソケットを使用しているアプリケーションを見つけるために使用できます。


0

OS X 10.9.5でこのスリーインワンをいじる:

sudo lsof | grep \ IPv | sort ; clear ; sudo lsof -U ; clear ; sudo netstat -a


0

FreeBSDでは-uスイッチをntpdate使用して、代わりに非特権ポートを使用します。

お気に入り: ntpdate -v -b -u 0.freebsd.pool.ntp.org

を使用man ntpdateして、何-v-b実行するかを確認します。


Debianのntpdateには-untp.orgからのオプションがあるので、ほとんどのシステムにあると思います。
-RobertL
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.